其他分享
首页 > 其他分享> > Go不同系统下的条件编译

Go不同系统下的条件编译

作者:互联网


Go 条件编译

文章目录

编译标签(build tag)

在源码文件顶部添加注释,来决定文件是否参与编译

// +build <tags>

****说明

标签可以指定为以下内容:

###编译条件为(Linux AND 386) OR (darwin AND (NOT cgo))
// +build linux, 386 darwin, !cgo

###一个文件可以有多个编译约束,如:(linux OR darwin) AND amd64
// +build linux darwin
// +build amd64

##将一个文件从编译中排除,使用ignore标签
// +build ignore

// +build的下一行必须是空行

文件后缀

编译器根据文件后缀来自动选择编译文件

$filename_$GOOS.go
$filename_$GOARCH.go
$filename_$GOOS_$GOARCH.go

如在项目中有tcp.gotcp_linux_x86.go两个文件,执行:

GOOS=linux GOARCH=x86 go build

将选tcp_linux_x86.go进行编译,而执行

GOOS=linux GOARCH=x86 go build

选择tcp.go进行编译。

利用ldflags在编译过程中为变量赋值

go build -ldflags "-w -s -X main.Version=${VERSION} -X github.com/demo/version.BuildNo=${BUILD_NO}"

参数:

​ -w 删除DWARF信息: 编译出来的程序无法用gdb进行调试

​ -s 删除符号表: panic的stack trace 没有文件名/行号信息,等价于C/C++程序被strip。

​ -X 替换包中的变量的值。

加上-w -s 可以有效减少编译出来的程序的大小,但不利于进行调试和日志追踪

/行号信息,等价于C/C++程序被strip。

​ -X 替换包中的变量的值。

加上-w -s 可以有效减少编译出来的程序的大小,但不利于进行调试和日志追踪

标签:系统,编译,GOARCH,build,go,linux,Go,GOOS
来源: https://blog.csdn.net/weixin_45268711/article/details/122129784