猿问

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

如果我编译这个程序


package main


import (

    "fmt"

    "os"

)


var version = os.Getenv("VERSION")


func main() {

    fmt.Println(version)

}

当我运行它时它会打印 env var


VERSION="0.123" ./example

> 0.123

有没有办法将 env var 编译成二进制文件,例如:


VERSION="0.123" go build example.go

然后在我运行时得到相同的输出


./example


侃侃尔雅
浏览 164回答 3
3回答

蝴蝶不菲

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%"

翻翻过去那场雪

Ainer-G 的回答让我找到了正确的地方,但这不是回答问题的完整代码示例。需要进行一些更改:将版本声明为 var version string编译 -X main.version=$VERSION这是完整的代码:package mainimport (    "fmt")var version stringfunc main() {    fmt.Println(version)}现在编译go build -ldflags "-X main.version=$VERSION"

至尊宝的传说

有一个os.Setenv()函数可以用来设置环境变量。因此,您可以通过像这样设置环境变量来启动您的应用程序:func init() {    os.Setenv("VERSION", "0.123")}如果您不想通过“手动”执行此操作,您可以为此创建一个工具,该工具将读取VERSION环境变量的当前值并.go在您的包中生成一个源文件,其中包含与上述代码完全相同的代码(除了使用当前所述的值VERSION的环境变量)。您可以通过发出go generate命令来运行此类代码生成。
随时随地看视频慕课网APP

相关分类

Go
我要回答