9

我在 Go 中有一个程序,我想在一堆二进制文件中编译,每个二进制文件的const值定义不同。更清楚的是,我有类似的东西:

const wordLen = 6
type knowledge [wordLen]byte

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

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

4

2 回答 2

16

是的,这可以使用Build Constraints

您可以提供这些约束的列表以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"

酒吧去

// +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
于 2016-03-22T10:21:29.510 回答
7

它不能解决你的确切问题,但它可能会解决其他问题,所以我补充说你可以使用-ldflagsgo 编译器的选项:

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

然而,它有两个缺点:

  • 仅适用于字符串
  • 仅适用于 var
于 2016-03-22T10:26:03.810 回答