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

aj3*_*423 3 environment-variables go

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

package main

import "fmt"

var BuildTime string

func main() {
    fmt.Println(BuildTime)
}
Run Code Online (Sandbox Code Playgroud)

我尝试将环境变量设置为当前时间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,同样的问题。

col*_*tor 5

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

要考虑可能包含空格的任何变量值,只需用单引号将构建参数括起来,'如下所示:

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

go build -ldflags "-X 'main.BuildTime=$bt'"
Run Code Online (Sandbox Code Playgroud)

注意:如果用单引号 () 括起来的值'本身可能有一个单引号 - 那么该值应该被正确转义