有没有一种方法可以在Go中的构建时定义一个常量?

nr7wwzry  于 2024-01-04  发布在  Go
关注(0)|答案(2)|浏览(135)

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

  1. const wordLen = 6
  2. type knowledge [wordLen]byte

字符串
在这里,wordLen与值6相关联,但我希望有不同的二进制文件,其值范围从5到10。我可以将其设置为变量,然后使用切片而不是数组,但这将对我的软件产生巨大的性能影响(是的,我尝试过)。
我希望在go build参数上有一些构建标记,以指示给定二进制文件的wordLen的值。那么,如何(尽可能地道)做到这一点?

hts6caw3

hts6caw31#

是的,这可以使用建置条件约束来达成。
您可以使用-tags旗标,将这些条件约束的清单提供给go build
范例:

主.go

  1. package main
  2. import "fmt"
  3. func main() {
  4. fmt.Println(f)
  5. }

字符串

去吧

  1. // +build foo
  2. package main
  3. const f = "defined in foo.go"

酒吧.去吧

  1. // +build bar
  2. package main
  3. const f = "defined in bar.go"


使用不同的标记编译代码将给予不同的结果:

  1. $ go build -tags foo
  2. $ ./main
  3. defined in foo.go
  4. $ go build -tags bar
  5. $ ./main
  6. defined in bar.go

展开查看全部
ulmd4ohb

ulmd4ohb2#

它并不能解决你的问题,但它可能解决其他问题,所以为了完整起见,我补充说,你可以使用go编译器的-ldflags选项:

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

字符串
然而,它有两个缺点:

  • 只适用于字符串
  • 仅适用于var

相关问题