lifelong learning & practice makes perfect
输出被编译的包名
go build -a的工作原理使得它在传统的gopath模式下会更有意义,因为它可以绕过缓存和已经安装到$GOPATH/pkg下的依赖包库文件(.a),直接将各个依赖包在本地的最新变化反映到重新构建的成果中。
在module-aware模式下go build -a和go build构建出的结果一般都是一致的,这也导致在该模式下go build -a变得很少用
会在构建的结果中加入竞态检测的代码。在程序运行过程中,如果发现对数据的并发竞态访问,这些代码会给出警告,这些警告信息可以用来辅助后续查找和解决竞态问题
go build -gcflags='-N -l' // 仅将传递的编译选项应用于当前包
go build -gcflags=all='-N -l' // 将传递的编译选项应用于当前包及其所有依赖包
go build -gcflags=std='-N -l' // 仅将传递的编译选项应用于标准库包
使用
go tool compile -help
查看支持的选项.
常用的选项:
在运行调试器对程序进行调试之前,我们通常使用“-N -l”两个选项关闭对代码的内联和优化,这样能得到更多的调试信息。
go tool link -help
常用选项
-X 设置指定包中string变量的值.
var (
version string
)
func main() {
if os.Args[1] == "version" {
fmt.Println("version:", version)
return
}
}
// go build -ldflags "-X main.version=v0.7.0" xxx.go