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

有没有办法在Go中定义构建时的常量?,go,constants,build-time,Go,Constants,Build Time,我在Go中有一个程序,我想用一堆二进制文件编译它,每个二进制文件都有一个定义不同的const值。更清楚地说,我有这样的想法: const wordLen = 6 type knowledge [wordLen]byte 这里,wordLen与值6相关联,但我希望有不同的二进制文件,其值范围为5到10。我可以将其设置为变量,然后使用切片而不是数组,但这将对我的软件性能产生巨大影响(是的,我尝试过) 我希望在go build参数上有一些build标记,以指示给定二进制文件的wordLen值。那么,

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

const wordLen = 6
type knowledge [wordLen]byte
这里,
wordLen
与值6相关联,但我希望有不同的二进制文件,其值范围为5到10。我可以将其设置为变量,然后使用切片而不是数组,但这将对我的软件性能产生巨大影响(是的,我尝试过)


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

是的,这是可以使用的

您可以使用
-tags
标志向
go build
提供这些约束的列表

例如:

梅因,加油 foo.go 酒吧 使用不同的标记编译代码将得到不同的结果:

$go构建-标记foo
美元/主要
在foo.go中定义
$go构建-标记栏
美元/主要
在bar.go中定义

它不能解决您的确切问题,但可能会解决其他问题,因此我添加了一个功能,您可以使用go编译器的
-ldflags
选项:

go build -ldflags "-X main.wordLen=6"
然而,它有两个缺点:

  • 仅适用于字符串
  • 仅适用于VAR

非常感谢尼莫。这些都是巨大的缺点,因为我需要使用一个数值常量;)但是,在某些情况下,这是一个非常有用的功能。
// +build foo

package main

const f = "defined in foo.go"
// +build bar

package main

const f = "defined in bar.go"
go build -ldflags "-X main.wordLen=6"