有没有办法在 Go 的构建时定义一个常量?

我有一个 Go 程序,我想在一堆二进制文件中编译,每个文件都有一个const不同定义的值。更清楚的是,我有这样的事情:


const wordLen = 6

type knowledge [wordLen]byte

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


我希望在go build参数上有一些构建标记来指示wordLen给定二进制文件的值是什么。那么,这样做的(尽可能惯用的)方法是什么?


犯罪嫌疑人X
浏览 143回答 2
2回答

森林海

是的,这可以使用Build Constraints。您可以提供这些约束的列表以go build使用该-tags标志。例子:main.gopackage mainimport "fmt"func main() {    fmt.Println(f)}foo.go// +build foopackage mainconst f = "defined in foo.go"去吧// +build barpackage mainconst f = "defined in bar.go"用不同的标签编译代码会得到不同的结果:$ go build -tags foo$ ./maindefined in foo.go$ go build -tags bar$ ./maindefined in bar.go

Qyouu

它不能解决您的确切问题,但可以解决其他问题,因此我补充说您可以使用-ldflagsgo 编译器的选项:go build -ldflags "-X main.wordLen=6"然而,它有两个缺点:仅适用于字符串仅适用于 vars
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go