C风格的条件编译

问题描述:

不golang支持C风格的条件编译

#define DEBUG 

#ifdef DEBUG 
    fmt.Println("Debug message..."); 
#endif 

所以我可以建立零运行时开销的调试版本?

+1

严格sp奥肯没有。没有预处理器,因此没有预处理器魔法。 – lofcek

+0

像Java一样,GoLang中没有任何嵌入式预处理器,但是也可以像Java那样使用第三方类似的工具。例如我使用[Java评论预处理器+ mvn-golang](https://github.com/raydac/mvn-golang/tree/master/mvn-golang-examples/mvn-golang-examples-preprocessing),它使得很好结果 –

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

看来这是目前的最佳做法... –