如何使用自定义环境变量 "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.
我想在程序启动时打印构建时间,例如:
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.