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

如何正确使用构建标签?

如何正确使用构建标签?

Go
阿晨1998 2021-06-04 13:09:06
我需要能够构建不同版本的 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”。


查看完整回答
反对 回复 2021-06-07
?
拉风的咖菲猫

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 的评论。


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

添加回答

举报

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