我需要能够构建go应用程序的不同版本;"调试"版本和正常版本.

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

我在读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 buildgo build -tags debug构建,标签应该排除config.go,包括config.debug.go.

...但这不管用.我得到:

src/build/config.Go:3: DEBUG redeclared in this block (<0>) previous declaration at src/build/config.debug.go:3

我做错了什么?

我是否应该使用另一种更合适的#ifdef风格的方法?

推荐答案

my answer to another question.// +build行后面需要一个空行.

另外,您可能需要config.go中的!,而不是config.debug.go中的!;并且您可能希望其中一个为"debug=false".

Go相关问答推荐

正在使用terratest执行terraform脚本测试,但遇到错误退出状态1

需要类型[]*structpb.Value(GCP Golang客户端库;aiPlatform)

Docker Compose Health Check未退出,错误为无法启动

如何将 goose 迁移与 pgx 一起使用?

切片的下限和上限

在 Go 中使用 Apache Arrow 按时间间隔对事件进行分区

Go Programming Language书上的例子server2错了吗?

如何在 fyne-io/fyne 中设置文本的字母间距?

获取 nil 指针类型的 reflect.Value

如何从 Go 中的 `HijackedResponse` 中删除 Cursor Position ANSI 转义码?

使用 unsafe.Pointer 将 struct point直接转换为另一个 struct 是否安全?

从 os.stdout 读取

每次有人进入我的网站时如何运行特定功能?

在删除级联时无法在 Gorm 中按预期工作

vs 代码调试 go 测试不通过标志

使用正则表达式拆分具有相同标题的数据块

如何在golang中使用ozzo验证进行时间最大验证

在 Go 中,为什么 exec.Command() 失败但 os.StartProcess() 成功启动winget.exe?

不理解切片和指针

在 etcd 键值存储中禁用历史记录