ubuntu下安装go语言开发环境
- 环境
- 安装golang
- 创建工作空间
-
- 创建工作空间
- 配置GOPATH环境变量
- 创建包路径
- 创建Hello World!
- 安装必要工具和插件
-
- 安装git
- 下载源码
- 安装工具包
- 安装go tour
- 我的第一个包与测试
-
- 你的第一个库
- 测试
- 问题小结
环境
VirtualBox
Ubuntu 18.04
安装golang
使用系统包管理工具安装golang,这样的好处是即使不是最新版本,也不影响正常使用
$ sudo apt-get install golang
安装完成后使用go version命令查看版本
$ go version
创建工作空间
创建工作空间
Go代码必须放在工作空间内。它其实就是一个目录,其中包含三个子目录:
- src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包),
- pkg 目录包含包对象,
- bin 目录包含可执行命令
使用mkdir命令创建工作空间
$ mkdir $HOME/go
配置GOPATH环境变量
GOPATH环境变量指明了你工作空间的位置(注意这个位置不能与你go安装目录相同)
$ export GOPATH=$HOME/go
将此工作空间的 bin 子目录添加到你的 PATH 中
$ export PATH=$PATH:$GOPATH/bin
然后执行配置
$ source $HOME/.profile
配置成功后可以用 go env检查配置
$ go env
创建包路径
在工作空间里创建一个文件夹来存放你的源文件
$ mkdir -p $GOPATH/src/github.com/user
创建Hello World!
先选择包路径,然后在对应文件夹里创建文件
$ mkdir $GOPATH/src/github.com/user/hello
在hello目录中创建hello.go的文件
hello.go
package main
import "fmt"
func main() {
fmt.Printf("Hello World!\n")
}
然后进入hello目录运行文件
$ go run hello.go
安装必要工具和插件
安装git
$ sudo apt-get install git
下载源码
# 创建文件夹(该命令要加-p,因为文件目录还不存在)
$ mkdir -p $GOPATH/src/golang.org/x/
# 下载源码
$ go get -d github.com/golang/tools
# copy
$ cp $GOPATH/src/github.com/golang/tools $GOPATH/src/golang.org/x/ -rf
安装工具包
$ go install golang.org/x/tools/go/buildutil
安装并运行hello程序
$ go install github.com/user/hello
这条命令会创建一个名为hello的可执行二进制文件,并安装到工作空间的bin文件下,并且会构建一条hello命令
注意:当你更改你的文件后必须重新构建你的程序,否则可执行二进制还是之前的文件,文件执行结果不会改变
安装go tour
$ go get github.com/Go-zh/tour/gotour
$ gotour
我的第一个包与测试
你的第一个库
编写一个属于你自己的库,并让hello程序来使用它
选择包路径并创建目录
$ mkdir $GOPATH/src/github.com/user/stringutil
在目录中创建reverse.go文件
// stringutil 包含有用于处理字符串的工具函数。
package stringutil
// Reverse 将其实参字符串以符文为单位左右反转。
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命令构建文件
$ go build github.com/user/stringutil
修改之前的hello程序,使用刚才建立的库
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}
用go install重新安装hello文件
$ go install github.com/user/hello
测试
Go拥有一个轻量级的测试框架,它由 go test 命令和 testing 包构成。
你可以通过创建一个名字以 _test.go 结尾的,包含名为 TestXXX 且签名为 func (t *testing.T) 函数的文件来编写测试。 测试框架会运行每一个这样的函数;若该函数调用了像 t.Error 或 t.Fail 这样表示失败的函数,此测试即表示失败。
我们可通过创建文件 $GOPATH/src/github.com/user/stringutil/reverse_test.go 来为 stringutil 添加测试
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测试
$ go test github.com/user/stringutil
问题小结
1.在创建工作空间和目录文件时注意路径的正确性,如果创建文件时路径不存在要加上-p参数
2.每次修改程序时要重新go install后,构建的临时指令才会更新,否则仍然运行之前的可执行文件