go build 常见编译选项:
参数 | 说明 |
---|---|
-o |
可执行文件名 |
-a |
强制重新编译所有包 |
-p |
并行编译所使用的CPU核数量 |
-v |
显示待编译包名字 |
-n |
仅显示编译命令,但不执行 |
-x |
显示正在执行的编译命令 |
-work |
显示临时工作目录,完成后不删除 |
-race |
启动数据竞争检查 |
-gcflags |
编译器参数 |
-ldflags |
链接器参数 |
-
gcflags 常见参数有:
参数 说明 -B
禁用越界检查 -N
禁用优化 -l
禁用内联 -u
禁用unsafe -S
输出汇编代码 -m
输出优化信息 -
ldflags 常见参数有:
参数 说明 -s
禁用符号表 -w
禁用DRAWF调试信息 -X
设置字符串全局变量值 -H
设置可执行文件格式
禁止编译优化
go build -gcflags "all=-N -l" -o main.exe main.go
-ldflags -s -w 去掉符号表和调试信息
go build -ldflags -s -w -o main.exe main.go
利用-ldflags -X
设置字符串全局变量值
发版时,我们需要一个信息版本号,如果每次人工修改,容易遗忘。而go 在编译时允许注入一个变量进去。
package main
import (
"fmt"
)
var MinVersion string
func main() {
fmt.Println(fmt.Sprintf(publish: %s", MinVersion))
}
如下命令编译:
go build -ldflags "-X 'main.MinVersion=1.0.0.1'" -o main.exe main.go
执行输出:
image.png
我们可以将代码提交ID作为在Makefile 中写入进去,这样就不用每次修改版本号了。
通过 go bulid -tags 实现编译控制
TODO
网友评论