我有文件playground.go
:
package main
import (
"fmt"
)
var GitCommit string
func main() {
fmt.Printf("Hello world, version: %s\n", GitCommit)
}
为什么构建 ldflag 的行为-X
取决于指定源文件名?:
# CASE 1
$ go build -ldflags "-X main.GitCommit=abc" && ./go_playground
Hello world, version:
$ go tool nm go_playground
52a900 D main.GitCommit
# CASE 2
$ go build -ldflags "-X main.GitCommit=abc" playground.go && ./playground
Hello world, version: abc
$ go tool nm playground
5242f0 D main.GitCommit
4c5678 R main.GitCommit.str
编辑:似乎从符号链接目录执行案例 1 时会出现问题;当 case 1 从原始目录执行时,变量被传递。我不确定这是否是预期的,或者这是一个错误。