coding-practicing

lifelong learning & practice makes perfect

View the Project on GitHub programnotes/coding-practicing

go build

流程

-x:print the commands

-v:print the names of packages as they are compiled

输出被编译的包名

-a 强制重新构建所有包

go build -a的工作原理使得它在传统的gopath模式下会更有意义,因为它可以绕过缓存和已经安装到$GOPATH/pkg下的依赖包库文件(.a),直接将各个依赖包在本地的最新变化反映到重新构建的成果中。

在module-aware模式下go build -a和go build构建出的结果一般都是一致的,这也导致在该模式下go build -a变得很少用

-race 加入竞检测代码

会在构建的结果中加入竞态检测的代码。在程序运行过程中,如果发现对数据的并发竞态访问,这些代码会给出警告,这些警告信息可以用来辅助后续查找和解决竞态问题

-gcflags 传给编译器的标志选项

go build -gcflags='-N -l'      // 仅将传递的编译选项应用于当前包
go build -gcflags=all='-N -l'  // 将传递的编译选项应用于当前包及其所有依赖包
go build -gcflags=std='-N -l'  // 仅将传递的编译选项应用于标准库包

使用

go tool compile -help

查看支持的选项.

常用的选项:

在运行调试器对程序进行调试之前,我们通常使用“-N -l”两个选项关闭对代码的内联和优化,这样能得到更多的调试信息。

-ldflags 传给链接器的标志选项集合

go tool link -help

常用选项