我需要能够构建不同版本的 go 应用程序;一个“调试”版本和一个正常版本。这很容易做到;我只有一个 const DEBUG,它控制应用程序的行为,但是每次我需要在构建类型之间交换时都必须编辑配置文件很烦人。我正在阅读有关 go build ( http://golang.org/pkg/go/build/ ) 和标签的信息,我想也许我可以这样做:配置文件:// +build !debugpackage buildconst DEBUG = falseconfig.debug.go:// +build debugpackage buildconst 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 风格的方式来做这件事吗?
2 回答
侃侃尔雅
TA贡献1801条经验 获得超16个赞
在“// +build”行之后需要一个空行。
此外,您可能想要“!” 在 config.go 中,而不是在 config.debug.go 中;并且大概你想要一个是“DEBUG = false”。
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
您可以为此使用编译时常量:如果您编译程序
go build -ldflags '-X main.DEBUG=YES' test.go
DEBUG包 main 中的变量将设置为字符串“YES”。否则,它会保留其声明的内容。
package main
import (
"fmt"
)
var DEBUG = "NO"
func main() {
fmt.Printf("DEBUG is %q\n", DEBUG)
}
编辑:从 Go 1.6(?) 开始,开关是-X main.DEBUG=YES,之前是-X main.DEBUG YES(没有=)。感谢@poorva 的评论。
- 2 回答
- 0 关注
- 191 浏览
添加回答
举报
0/150
提交
取消