如果我编译这个程序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%"
翻翻过去那场雪
TA贡献2065条经验 获得超13个赞
Ainer-G 的回答让我找到了正确的地方,但这不是回答问题的完整代码示例。需要进行一些更改:
将版本声明为
var version string
编译
-X main.version=$VERSION
这是完整的代码:
package main
import (
"fmt"
)
var version string
func main() {
fmt.Println(version)
}
现在编译
go build -ldflags "-X main.version=$VERSION"
至尊宝的传说
TA贡献1789条经验 获得超10个赞
有一个os.Setenv()函数可以用来设置环境变量。
因此,您可以通过像这样设置环境变量来启动您的应用程序:
func init() {
os.Setenv("VERSION", "0.123")
}
如果您不想通过“手动”执行此操作,您可以为此创建一个工具,该工具将读取VERSION环境变量的当前值并.go在您的包中生成一个源文件,其中包含与上述代码完全相同的代码(除了使用当前所述的值VERSION的环境变量)。您可以通过发出go generate命令来运行此类代码生成。
- 3 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消