如何使用自定义环境变量 "go build -ldflags"

How to "go build -ldflags" with custom environment variable

我想在程序启动时打印构建时间,例如:

package main

import "fmt"

var BuildTime string

func main() {
    fmt.Println(BuildTime)
}

我尝试通过 set bt (date) 将环境变量设置为当前时间,确保 echo $bt 显示时间。

然后使用 go build -ldflags "-X main.BuildTime=$bt" 构建,但构建失败并显示了某些链接器的用法,例如:

我尝试了一些系统变量,如 $USER/$PWD/$TERM,如 go build -ldflags "-X main.BuildTime=$USER",一切正常,为什么不能用于 $bt

我用的是 fish shell,但我也试过 bash,同样的问题。

问题是 date 有空格 - 而其他环境变量没有。

为了说明任何可能有空格的变量值,只需用单引号 ' 将构建参数括起来,如下所示:

# go build -ldflags "-X main.BuildTime=$bt"  # spaces in $bt value will lead to parse errors

go build -ldflags "-X 'main.BuildTime=$bt'"

注意:如果您用单引号 (') 括起来的值本身可能有一个单引号 - 那么该值应该是 properly escaped.