一尘不染

如何正确使用构建标签?

go

我需要能够构建go应用程序的不同版本;“调试”版本和普通版本。

这很容易做到;我只是有一个const DEBUG,它控制应用程序的行为,但是每次我需要在构建类型之间进行交换时,都必须编辑配置文件,这很烦人。

我正在阅读有关go
build(http://golang.org/pkg/go/build/)和标签的信息,我想也许我可以这样做:

config.go:

// +build !debug
package build
const DEBUG = false

config.debug.go:

// +build debug
package build
const DEBUG = true

然后,我应该能够使用“ go build”或“ go build -tags
debug”进行构建,并且标签应排除config.go并包含config.debug.go。

…但这是行不通的。我得到:

src / build / config.go:3:在此块(<0>)中先前src / build /
config.debug.go:3处重新声明了调试。

我究竟做错了什么?

我应该使用另一种更合适的#ifdef样式来做到这一点吗?


阅读 150

收藏
2020-07-02

共1个答案

一尘不染

请参阅我对另一个问题的回答。您需要在“ // + build”行之后留空行。

另外,您可能想要“!” 在config.go中,而不是在config.debug.go中;并且可能您希望其中一个是“ DEBUG = false”。

2020-07-02