有没有办法在 Go 中构建时定义常量?

问题描述 投票:0回答:2

我有一个 Go 程序,我想将其编译为一堆二进制文件,每个二进制文件都有一个不同定义的

const
值。更清楚地说,我有类似的东西:

const wordLen = 6
type knowledge [wordLen]byte

这里,

wordLen
与值 6 相关联,但我想要不同的二进制文件,值范围从 5 到 10。我可以将其设为变量,然后使用切片而不是数组,但这会产生对我的软件有巨大的性能影响(是的,我尝试过)。

我希望在

go build
参数上有一些构建标签,以指示给定二进制文件的
wordLen
的值是什么。那么,(尽可能惯用的)方法是什么?

go constants build-time
2个回答
21
投票

是的,可以使用构建约束

您可以使用

go build
标志向
-tags
提供这些约束的列表。

示例:

main.go

package main

import "fmt"

func main() {
    fmt.Println(f)
}

foo.go

// +build foo

package main

const f = "defined in foo.go"

酒吧.go

// +build bar

package main

const f = "defined in bar.go"

使用不同标签编译代码会得到不同的结果:

$ go build -tags foo
$ ./main
defined in foo.go
$ go build -tags bar
$ ./main
defined in bar.go

12
投票

它不能解决您的确切问题,但它可能会解决其他问题,因此为了完整起见,我添加您可以使用 go 编译器的

-ldflags
选项:

go build -ldflags "-X main.wordLen=6"

但是它有两个缺点:

  • 仅适用于字符串
  • 仅适用于变量
© www.soinside.com 2019 - 2024. All rights reserved.