Go语言:入门

C++的代码的组织,依赖的管理规定几乎为零。学习golang的时候,一上来就是看语法,看代码,在代码组织和依赖管理这里碰了不少壁,所以重新看了一下官方文档,并做下备忘。

注意:Go是跨平台的,本文基于Ubuntu(Linux)

安装/升级

  1. 下载最新版的安装包。
  2. 如果升级,需要先删除旧版本:rm /usr/local/go
  3. 把解压后的目录安装(复制)到/usr/local/go
  4. 设置环境变量在$HOME/.profile文件中加上export PATH=$PATH:/usr/local/go/bin
  5. 查看你安装的go版本go version
  6. 更多详细请查看官方文档

开始写Go代码

说明

  • 在go中,一般把所有代码放在一个workspace(工作空间下)。
  • 这个workspace下可能会有很多使用不同版本控制工具的代码仓库。
  • 每个仓库有一个到多个package。
  • 每个package由一个到多个go源码文件组成。

Workspaces

一个Workspace下有三个目录:

  • src 存放Go源码,包括自己写的代码和import的第三方代码。
  • pkg存放包对象——编译后的二进制目标文件。
  • bin存放可执行文件。

GOPATH

  • 环境变量GOPATH就是你的workspace的路径。默认是$HOME/go。注意:GOPATH不能与go的安装路径相同。
  • go env GOPATH:查看当前生效的GOPATH的值。
  • 为了方便,可以将$GOPTH/bin路径加入到$PATH
export PATH=$PATH:$(go env GOPATH)/bin

第一个程序

假设你的代码的base path是github.com/user

  • 创建你的代码base path:mkdir -p $GOPATH/src/github.com/user
  • 创建你的第一个程序的目录:mkdir -p $GOPATH/src/github.com/user/hello
  • 在你的程序目录下创建一个源文件hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello World")
}
  • 编译 :
    • go build github.com/user/hello在当前路径生成可执行文件。
    • go build在hello目录下执行(下面go install go test都类似)。
    • go install github.com/user/hello$GOPATH/bin目录下生成可执行文件。

第一个包(package)

  • 创建代码路径:mkdir -p $GOPATH/src/github.com/user/stringutil
  • 在目录下创建源文件reverse.go
package stringutil

func Reverse(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }   
    return string(r)
}
  • 执行go build github.com/user/stringutil不会生成任何东西,但是如果代码有问题会报错。
  • 执行go install github.com/user/stringutil在生成二进制目标文件。
  • 修改hello.go的代码,让它调用stringutil.Reverse
package main

import (
    "fmt"

    "github.com/JinheLin/stringutil"
)

func main() {
    fmt.Println(stringutil.Reverse("!oG ,olleH"))
}
  • 编译执行

第一个测试

  • go提供了一个轻量级测试框架,主要由go test命令和package testing组成。
  • go规定测试代码的文件名为xxx_test.go:在stringutils下为reverse.go创建一个测试代码文件reverse_test.go。
package stringutil

import "testing"

func TestReverse(t *testing.T) {
    cases := []struct {
        in, want string
    }{  
        {"Hello, world", "dlrow ,olleH"},
        {"Hello, 世界", "界世 ,olleH"},
        {"", ""},
    }

    for _, c := range cases {
        got := Reverse(c.in)
        if got != c.want {
            t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
        }
    }
}
  • 执行go test github.com/user/stringutil

总结

  • 学习go的安装和相关代码路径环境变量。
  • 学习go代码的组织结构。
  • 学习go package的基本管理。

参考文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 本篇主要介绍go的生态。包括安装,ide,go命令三部分。随着作者的持续学习,内容可能会有所更新。 安装 截止到本...
    纳达丶无忌阅读 2,077评论 1 6
  • 原文链接 http://ironxu.com/581 本文是 How to Write Go Code 的学习笔记...
    好刚编程阅读 1,263评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 仅为方便查看,搬运一下,也可看原文 1. 简介 本文是关于Go编程语言的基础教程,主要面向有C/C++基础的读者。...
    老魏阅读 497评论 0 2
  • 清明节放假,大家都去旅游去了,只有我选择搞自己的事情,下午去发传单,也了解了一些问题,复印的传单也发完了,晚上自己...
    雷帅帅尹雷阅读 99评论 0 0