} 使用-ldflags 设置编译参数-ldflags "-w -s"。 其中-w为去掉调试信息(无法使用gdb调试),-s为去掉符号表(暂未清楚具体作用)。 gobuild -ldflags"-w -s"./hello.go 运行观察打印,看见文件名、行号等信息依然保留。 ./hello 打印输出如下。而且将该可执行文件置于任何目录下执行,都显示相同的输出。 可见,...
-ldflags " \ -X 'main.BuildVersion=${build_version}' \ -X 'main.BuildGoVersion=${go_version}' \ -X 'main.BuildTime=${build_time}' \ -X 'main.BuildCommit=${build_commit}' \ -o ${APP_NAME} " main.go CGO_ENABLED=0 禁用cgo。 -X 'main.BuildVersion=${build_version}' 编译时...
go build [-o 输出名] [-i] [编译标记] [包名] 如果参数为***.go文件或文件列表,则编译为一个个单独的包。 当编译单个main包(文件),则生成可执行文件。 当编译单个或多个包非主包时,只构建编译包,但丢弃生成的对象(.a),仅用作检查包可以构建。 当编译包时,会自动忽略'_test.go'的测试文件。 -O ...
mkdir -p bin/ && VERSION=$(git describe --tags --always) && go build -ldflags "-X main.Version=$(VERSION)" -o ./bin/ ./... 这种多条命令,使用&&符号拼接起来,不易于维护,通常我们将它写在shell脚本里或者Makefile中,这不是我们本文讨论重点,下面以Makefile为例 VERSION=$(shell git describe ...
在命令行中使用`go build`时,可以通过添加`-w -s`参数来实现特定的功能。`-w`参数表示在生成可执行文件时,禁用链接器的警告信息;而`-s`参数则表示生成的可执行文件中将不包含任何调试信息。使用`go build`命令时,如果指定的参数为`.go`文件或文件列表,程序会将这些文件编译为独立的包。若编译...
编译时加上参数:go build -a -ldflags "-X main.version=1.2" -o bin/demo main.go 运行测试如下: ~ ./bin/demo1.2 但是测试到覆盖子包下的变量时,发现一直替换不成功。 ~ mkdir pkg ~ touch pkg/vars.go~ cat pkg.vars.gopackagepkgimport"fmt"varversion="N/A"funcInit(){ ...
go build -ldflags "-s -w"是一个 Go 语言的构建命令,其中使用了-ldflags参数来传递一些额外的链接器标志。 这个命令中,-ldflags "-s -w"传递了两个标志: -s:该标志会禁止生成可执行文件中的符号表信息,这样在执行文件时就不会暴露源代码中的函数名、变量名等符号信息。这有助于保护代码的隐私和安全。
在go build 命令里有一个-ldflags参数,该参数可以接收-Ximportpath.name=value形式的值,该值就是实现信息动态注入的核心入口。 以下面一段例子来演示 先定义 version,buildTime,osArch 三个变量 然后将这三个变量的值打印出来 packagemainimport"fmt"var(versionstringbuildTimestringosArchstring)funcmain(){fmt.Pr...
go build 常见编译优化 一般情况下,go build 可以直接编译程序,无需额外的参数设定。 但在编译生产环境下使用的可执行程序时候,go build 的一些参数还是很有用的。 减小编译后可执行程序的大小 1 go build -ldflags'-w -s' 说明: -w 禁止生成debug信息,注意使用该选项后,无法使用 gdb 进行调试...