Go 语言标准命令详解。
go env
go env
是非常常用的命令,用于查看当前的 go 环境信息。
后面跟上环境变量名称,则可以输出对应环境变量的值:
1 | $ go env GOROOT |
如果要修改某一个环境变量的值,那么该如何修改呢?
不同的操作系统,修改的位置不同:
- Mac 和 Linux 是
~/.bashrc
或~/.bash_profile
文件 - 如果使用了Zsh 那么就是
~/.zshrc
文件 - Windows 则需要去系统设置里面的环境变量中修改
1 | # 更新环境变量的值 |
添加以上内容到环境配置文件中,并保存,执行source ~/.zshrc
命令刷新环境变量即可。
go build
go build
也是非常常用的命令,用于对 Go 程序进行编译,命令格式如下:
1 | $ go build [-o output] [-i] [build flags] [packages] |
有两种情况:
- 对于普通包( 非 main 包)而言,只会执行编译检查, 不会产生任何文件
- 对于 main 包除了进行编译检查外,还会在当前目录下生成一个可执行文件
如果当前目录下有多个文件,却只想编译某个文件,可以在命令后面指定文件名称:
1 | $ go build main.go |
Go提供了编译链工具,可以让我们在任何一个开发平台上,编译出其他平台的可执行文件。
默认情况下,都是根据当前的机器生成的可执行文件,如果需要在当前环境编译出其他操作系统的可执行文件,那么使用下面的命令:
1 | $ GOOS=linux GOARCH=amd64 go build bash |
GOOS 表示的是操作系统的名称,GOARCH 表示的是目标处理器的架构。
go run
go build
命令是对程序进行编译,go run
则是对程序进行运行,相当于是把编译和执行二进制文件这两步,合并成了一步:
1 | $ go run hello.go |
go install
go install
和 go build
类似,不过它可以在编译后,会把生成的可执行文件或者库安装到对应的目录下,以供使用。
它的用法和 go build
差不多,如果不指定一个包名,就使用当前目录。安装的目录都是约定好的,如果生成的是可执行文件,那么安装在 $GOPATH/bin
目录下;如果是可引用的库,那么安装在 $GOPATH/pkg
目录下。
有时候一些第三方的依赖会提供一些命令行工具,这个时候就会用到 go install
命令进行安装了,例如安装 Air:
1 | $ GO111MODULE=on go install github.com/cosmtrek/air@latest |
go get
go get
命令也是十分常用的,用于下载更新指定的包以及依赖的包,并对它们进行编译和安装。
如果需要更新某个依赖包,则加上 -u
参数:
1 | $ go get -u golang.org/x/sys |
下载下来的依赖包,全部在 $GOPATH
目录下。
go fmt
go fmt
用于统一代码风格,go fmt
会自动格式化代码文件并保存,它本质上其实是调用的 gofmt -l -w
这个命令。
使用 GoLand 进行开发时,每次编辑完一个文件,都会自动进行 gofmt
格式化。
go test
go test
命令用于Go 的单元测试,它也是接受一个包名作为参数,如果没有指定,使用当前目录。 go test
运行的单元测试必须符合 Go 的测试要求。
- 写有单元测试的文件名,必须以_test.go结尾。
- 测试文件要包含若干个测试函数。
- 这些测试函数要以Test为前缀,还要接收一个*testing.T类型的参数。
1 | package test |
这是一个单元测试,保存在 default_test.go
文件中。 如果要运行这个单元测试,在该文件目录下,执行 go test default_test.go
即可。
1 | $ go test default_test.go |
go vet
go vet
命令用于检查代码中常见的错误,其中包括:
- Printf 这类的函数调用时,类型匹配了错误的参数。
- 定义常用的方法时,方法签名错误。
- 错误的结构标签。
- 没有指定字段名的结构字面量。
1 | package main |
这是一个很明显的错误例子,格式字符串中没有占位符,使用 go vet
命令就可以发现这个错误:
1 | $ go vet hello.go |
使用 GoLand 进行开发时,对于这种类型的错误,编译器会给出一个警告。
go list
go list
命令的作用是列出指定的代码包的信息。
查看当前包所使用的所有第三方依赖:
1 | $ go list -m all |
go list
命令还有许多其他用法,通过 go help list
进行查看。