如果我编译这个程序
package main
import (
"fmt"
"os"
)
var version = os.Getenv("VERSION")
func main() {
fmt.Println(version)
}
Run Code Online (Sandbox Code Playgroud)
它在我运行时打印env var
VERSION="0.123" ./example
> 0.123
Run Code Online (Sandbox Code Playgroud)
有没有办法将env var编译成二进制文件,例如:
VERSION="0.123" go build example.go
Run Code Online (Sandbox Code Playgroud)
然后在我运行时获得相同的输出
./example
Run Code Online (Sandbox Code Playgroud)
Ain*_*r-G 21
转1.5及以上编辑:
截至目前,语法已经改变.使用
go build -ldflags "-X main.Version=$VERSION"
Run Code Online (Sandbox Code Playgroud)
在Linux上,在Windows上使用
go build -ldflags "-X main.Version=%VERSION%"
Run Code Online (Sandbox Code Playgroud)
这是-X
链接器标志的用途.在你的情况下,你会这样做
go build -ldflags "-X main.Version $VERSION"
Run Code Online (Sandbox Code Playgroud)
编辑:在Windows上这将是
go build -ldflags "-X main.Version %VERSION%"
Run Code Online (Sandbox Code Playgroud)
Ainer-G's answer led me to the right place, but it wasn't a full code sample answering the question. A couple of changes were required:
var version string
-X main.version=$VERSION
Here's the full code:
package main
import (
"fmt"
)
var version string
func main() {
fmt.Println(version)
}
Run Code Online (Sandbox Code Playgroud)
Now compile with
go build -ldflags "-X main.version=$VERSION"
Run Code Online (Sandbox Code Playgroud)
有一个os.Setenv()
函数可以用来设置环境变量。
因此,您可以通过设置环境变量来启动应用程序,如下所示:
func init() {
os.Setenv("VERSION", "0.123")
}
Run Code Online (Sandbox Code Playgroud)
如果您不想“手动”执行此操作,您可以为此创建一个工具,该工具将读取环境VERSION
变量的当前值并在包中生成一个.go
源文件,其中包含与上面的代码完全相同的内容(除了使用当前的值)环境变量的值VERSION
)。您可以通过发出命令来运行此类代码生成go generate
。
请阅读生成代码博客文章,了解有关go generate
.