为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
犯罪嫌疑人X 2021-12-27 15:30:07
我有一个 Go 程序,我想在一堆二进制文件中编译,每个文件都有一个const不同定义的值。更清楚的是,我有这样的事情:const wordLen = 6type knowledge [wordLen]byte这里,wordLen与值 6 相关联,但我想要不同的二进制文件,值范围从 5 到 10。我可以将其设为变量,然后使用切片而不是数组,但这会对性能产生巨大影响在我的软(是的,我试过)。我希望在go build参数上有一些构建标记来指示wordLen给定二进制文件的值是什么。那么,这样做的(尽可能惯用的)方法是什么?
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

是的,这可以使用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


查看完整回答
反对 回复 2021-12-27
?
Qyouu

TA贡献1786条经验 获得超11个赞

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

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

然而,它有两个缺点:

  • 仅适用于字符串

  • 仅适用于 vars


查看完整回答
反对 回复 2021-12-27
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信