我需要能够构建一个go应用程序的不同版本; 'debug'版本和普通版本.
这很容易做到; 我只是有一个const DEBUG,它控制着应用程序的行为,但是每次我需要在构建类型之间进行交换时都必须编辑配置文件.
我正在阅读关于go build(http://golang.org/pkg/go/build/)和标签,我想也许我可以这样做:
config.go:
// +build !debug
package build
const DEBUG = false
Run Code Online (Sandbox Code Playgroud)
config.debug.go:
// +build debug
package build
const DEBUG = true
Run Code Online (Sandbox Code Playgroud)
然后我应该能够使用"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风格的方式我应该使用?
axw*_*axw 29
看看我对另一个问题的回答.在"// + build"行之后需要一个空行.
另外,你可能想要"!" 在config.go中,而不是在config.debug.go中; 并且大概你想要一个"DEBUG = false".
top*_*kip 22
您可以使用编译时常量:如果您使用编译程序
go build -ldflags '-X main.DEBUG=YES' test.go
Run Code Online (Sandbox Code Playgroud)
DEBUG包main中的变量将设置为字符串"YES".否则它保留其声明的内容.
package main
import (
"fmt"
)
var DEBUG = "NO"
func main() {
fmt.Printf("DEBUG is %q\n", DEBUG)
}
Run Code Online (Sandbox Code Playgroud)
编辑:因为Go 1.6(?)-X main.DEBUG=YES之前的开关是-X main.DEBUG YES(没有=).感谢@poorva的评论.
| 归档时间: |
|
| 查看次数: |
17272 次 |
| 最近记录: |