2016-08-15 41 views
5

不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),它使得很好結果 –

回答

12

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

看來這是目前的最佳做法... –