go build常用命令行选项

1、go build

1.1 -x -v :让构建过程一目了然

go build添加-x -v选项,可以输出构建的执行细节。-v用于输出当前正在编译的包,而-x则用于输出go build执行的每一个命令。

在这里插入图片描述

 

1.2 -race:让并发bug无处遁形

-race命令行选项可以在构建时开启竞态检查。在程序运行时,如果发现对数据的并发竞态访问,就会给出警告。

测试代码如下:

package main

import (
	"sync"
)

func main() {
	m := map[int]int{}

	wg := sync.WaitGroup{}

	wg.Add(20)
	for i := 0; i < 20; i++ {
		go func(n int)  {
			m[n] = n
			wg.Done()	
		}(i)
	}

	wg.Wait()
}

使用-race选项编译,运行结果如下:

在这里插入图片描述

 

1.3 -gcflags:传递给编译器的标志选项集合

go build实质上是通过调用go自带的compile工具对go代码进行编译的。在linux下的位置为$GOROOT/pkg/tool/linux_amd64/compile。go build可以经过-gcflags向compile工具传递编译所需的命令标志选项集合。

go build采用下面的模式将标志选项列表传递给go编译器:

go build -gcflags='空格分割的标志选项列表'


go build -gcflags='-l -m'

这些命令行标志选项是传递给go编译器的,因此可以使用下面的命令查看编译器支持的选项集合:

go tool compile -help

下面是一些常用的命令行标志选项:

  • -l:关闭内敛。
  • -N:关闭代码优化。
  • -m:输出逃逸分析的分析决策过程(哪些变量在栈上分配,哪些变量在堆上分配)。
  • -S:输出汇编代码。

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

 

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

go build也支持通过-ldflags为链接器传递标志选项。链接器在linux下的位置为$GOROOT/pkg/tool/linux_amd64/link。

使用下面的命令可以查看链接器支持的选项集合:

go tool link -help

下面三个是常用的命令行选项标志:

  • -X:设定包中string类型变量的值。
  • -s:不生成符号表。
  • -w:不生成DWARF(Debugging With Attributed Record Formats)调试信息。

 

-X选项的例子:可以在编译时指定程序的版本。

package main

import (
	"fmt"
	"os"
)

var version string

func main() {
	if len(os.Args) > 1 && os.Args[1] == "version" {
		fmt.Println(version)
	}
}

在这里插入图片描述

默认情况下,go build构建出的可执行文件中都是包含符号表和DWARF格式的调试信息,这虽然让最终二进制文件的体积都增加了,但是符号表和调试信息对于生产环境下程序异常的现场保存和在线调试都有着重要意义,如果不在意这些信息或者对应用的大小比较敏感,那么可以通过-s和-w选项将这些信息从最终的二进制文件中剔除。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值