C风格的条件编译
问题描述:
不golang支持C风格的条件编译
#define DEBUG
#ifdef DEBUG
fmt.Println("Debug message...");
#endif
所以我可以建立零运行时开销的调试版本?
答
Go没有预处理器或宏系统。你可以做的是传递标签去建立-tags
标志并使用构建约束。要做到这一点,你需要两个版本的相同来源,只有一个版本取决于标签是否存在。
在https://golang.org/pkg/go/build/
main_debug.go
// +build debug
package main
import (
"fmt"
)
func main() {
fmt.Println("Debug build")
}
main_release.go看构建约束
// +build !debug
package main
import (
"fmt"
)
func main() {
fmt.Println("Release build")
}
这里go build
将编译main_release.go和go build -tags debug
将与main_debug.go编译
+0
看来这是目前的最佳做法... –
严格sp奥肯没有。没有预处理器,因此没有预处理器魔法。 – lofcek
像Java一样,GoLang中没有任何嵌入式预处理器,但是也可以像Java那样使用第三方类似的工具。例如我使用[Java评论预处理器+ mvn-golang](https://github.com/raydac/mvn-golang/tree/master/mvn-golang-examples/mvn-golang-examples-preprocessing),它使得很好结果 –