为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 将环境变量编译成二进制

Golang 将环境变量编译成二进制

Go
侃侃尔雅 2021-09-13 16:21:33
如果我编译这个程序package mainimport (    "fmt"    "os")var version = os.Getenv("VERSION")func main() {    fmt.Println(version)}当我运行它时它会打印 env varVERSION="0.123" ./example> 0.123有没有办法将 env var 编译成二进制文件,例如:VERSION="0.123" go build example.go然后在我运行时得到相同的输出./example
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

Go 1.5 及以上版本编辑:

截至目前,语法已更改。

在 Unix 上使用:

go build -ldflags "-X main.Version=$VERSION"

在 Windows 上使用:

go build -ldflags "-X main.Version=%VERSION%"

这就是-X链接器标志的用途。在你的情况下,你会做

go build -ldflags "-X main.Version $VERSION"

编辑:在 Windows 上,这将是

go build -ldflags "-X main.Version %VERSION%"


查看完整回答
反对 回复 2021-09-13
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

Ainer-G 的回答让我找到了正确的地方,但这不是回答问题的完整代码示例。需要进行一些更改:

  1. 将版本声明为 var version string

  2. 编译 -X main.version=$VERSION

这是完整的代码:

package main


import (

    "fmt"

)


var version string


func main() {

    fmt.Println(version)

}

现在编译


go build -ldflags "-X main.version=$VERSION"


查看完整回答
反对 回复 2021-09-13
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

有一个os.Setenv()函数可以用来设置环境变量。


因此,您可以通过像这样设置环境变量来启动您的应用程序:


func init() {

    os.Setenv("VERSION", "0.123")

}

如果您不想通过“手动”执行此操作,您可以为此创建一个工具,该工具将读取VERSION环境变量的当前值并.go在您的包中生成一个源文件,其中包含与上述代码完全相同的代码(除了使用当前所述的值VERSION的环境变量)。您可以通过发出go generate命令来运行此类代码生成。


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信