猿问

如何正确使用构建标签?

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


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


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


配置文件:


// +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: DEBUG 在这个块 (<0>) 之前在 src/build/config.debug.go:3 的声明中重新声明


我究竟做错了什么?


我应该使用另一种更合适的#ifdef 风格的方式来做这件事吗?


阿晨1998
浏览 192回答 2
2回答

侃侃尔雅

在“// +build”行之后需要一个空行。此外,您可能想要“!”&nbsp;在 config.go 中,而不是在 config.debug.go 中;并且大概你想要一个是“DEBUG = false”。

拉风的咖菲猫

您可以为此使用编译时常量:如果您编译程序go build -ldflags '-X main.DEBUG=YES' test.goDEBUG包 main 中的变量将设置为字符串“YES”。否则,它会保留其声明的内容。package mainimport (&nbsp; &nbsp; "fmt")var DEBUG = "NO"func main() {&nbsp; &nbsp; fmt.Printf("DEBUG is %q\n", DEBUG)}编辑:从 Go 1.6(?) 开始,开关是-X main.DEBUG=YES,之前是-X main.DEBUG YES(没有=)。感谢@poorva 的评论。
随时随地看视频慕课网APP

相关分类

Go
我要回答