Golang预处理器就像C风格的编译开关

时间:2016-04-18 20:39:25

标签: go

GO语言是否有预处理器?当我查找互联网时,很少有* .pgo转换为* .go的方法。而且,我想知道Go是否可行。

#ifdef COMPILE_OPTION
  {compile this code ... }
#elif 
  {compile another code ...}

,或者 #undef in c

3 个答案:

答案 0 :(得分:17)

实现这一目标的最接近方法是使用build constraints。例如:

main.go

package main

func main() {
    println("main()")
    conditionalFunction()
}

a.go

// +build COMPILE_OPTION

package main

func conditionalFunction() {
    println("conditionalFunction")
}

b.go

// +build !COMPILE_OPTION

package main

func conditionalFunction() {
}

输出:

% go build -o example ; ./example
main()

% go build -o example -tags COMPILE_OPTION ; ./example
main()
conditionalFunction

答案 1 :(得分:0)

可能有可能使用Java Comment Preprocessor + maven golang plugin并获得一些类似的行为,在golang代码看起来像

的情况下
//#if COMPILE_OPTION
 fmt.Println("Ok")
//#else
 fmt.Println("No")
//#endif

这里放置了一些示例https://github.com/raydac/mvn-golang/tree/master/mvn-golang-examples/mvn-golang-examples-preprocessing

答案 2 :(得分:0)

请注意,可以使用任何宏语言作为go的预处理器。一个例子就是GNU的m4宏语言。

然后,您可以将代码编写为* .go.m4文件,使用构建系统通过m4馈送它们,将它们转换为生成的* .go文件,然后进行编译。

这对于编写泛型也很方便。