记录 Go 配套的常用命令。
go build
编译
-
-mod=vendor
build 时优先使用 vendor 中的依赖包 -
-race
增加 data race detector 功能,在程序执行过程中会分析共享变量和锁的执行过程,分析是否存在 data race,并生成报告以便定位问题。在运行时,如果发现 data race,则会输出WARNING: DATA RACE xxxx
,同时输出涉及的携程的栈。- 所谓data race是指多个线程在未加锁的情况下对同一个变量赋值,有可能引发意外错误,比如进程退出、逻辑错乱,不会引发 panic,所以不易察觉。
- 如果包名是
main
,执行go build
时会自动找到并编译,会编译为二进制文件放在当前包内 - 如果包名不是
main
,执行go build
会找不到,需要执行go build xxx.go
,会尝试编译,成功后丢弃编译出的二进制文件,如果想生成二进制文件需要用-o name
执行二进制文件名
可以通过下面环境变量设置交叉编译选项:
1 |
|
GOOS=linux GOARCH=amd64 go build main.go
- CGO_ENABLED 是否启用 CGO,0 不启用; 1 启用;
- GOOS 目标操作系统,windows linux darwin freebsd,其中 darwin 是 mac 的操作系统
- GOARCH 目标操作系统架构,386 amd64 arm
在编译时写入版本号在运行时读出
- 利用
go build -ldflags="-X 'package_path.variable_name=new_value'"
在编译期覆盖指定变量
1 |
|
package main
var GitSHA string // 这个变量将被覆盖
func main() {
fmt.Println("gitSHA:", GitSHA) // 输出 gitSHA: xxxxx
}
- 注意,必须是变量,不能是常量,否则无法成功覆盖
go run
编译并运行
go run hello.go
go mod
go mod vendor
更新本工程的依赖库到本地 vendor 文件夹,不指定特定版本的外部包
go mod tidy
根据 go.mod 文件整理一下依赖关系,只变更 go.mod 和 go.sum 文件。
go install
编译指定的源码库并安装到 GOPATH/bin 目录下
go get
-
和
go install
功能相同 -
在 go mod 模式下,会自动更新到
go.mod
文件中的包依赖
go fmt
对.go
文件进行格式化处理
go vet
检查包中的错误
go tool
go tool compile -S main.go > main.s
将文件编译为汇编代码,以便查看