如果我编译这个程序

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

推荐答案

Go 1.5 and above edit:

到目前为止,语法已经更改.

在Unix上使用:

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

在Windows上使用:

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

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

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

Edit:在Windows上这将是

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

More info in the linker docs

Go相关问答推荐

从Kafka到Clickhouse的实时消费数据

调用API时使用nginx作为反向代理时从nginx获取502坏网关

Kafka消费者在需要时不会暂停

如何使用Promela建模语言对Golang RWLock进行建模

按键值排序字符串- Golang

Golang应用程序:所请求的资源上不存在HTTP-Control-Allow-Origin标头

为什么Slices包中的函数定义Slice参数的类型参数?

Websocket服务器实现与x/net库trowing 403

无法使用Segentio;S Kafka-Go连接到融合的Kafka

golang regex基于关键字拆分字符串

如何确定泛型类型在运行时是否可比较?

带有前导零的整数参数被 flag.IntVar 解析为八进制

在 Go sync.Map 中,为什么这部分实现不一致或者我误解了什么?

如何在 fyne-io/fyne 中设置文本的字母间距?

使用 Go 根据 /etc/shadow 文件中的散列密码验证密码

golang 中的可变参数函数

如何在切片增长时自动将切片的新元素添加到函数参数

Gorm 在保存/创建时序列化 struct

Grafana/Prometheus 将多个 ip 可视化为查询

不能使用 *T 类型的变量作为参数类型