Go语言条件编译脚本

Go by 达达 at 2012-09-12

有时候一些代码逻辑只想在debug版中执行又不想加判断语句影响release版的性能,Go语言没有原生的条件编译语法,只好靠自己了。

今天用sed + grep做了一个简单的替换脚本,可以在发布程序的时候注释掉debug用的代码,完整代码如下:

#!/bin/sh
sed -i "s/\/\*\* IF RELEASE/\/\*\* IF DEBUG \*\*\//g" `grep -rl "/\*\* IF RELEASE" * | grep -v svn`
sed -i "s/END RELEASE \*\*\//\/\*\* END \*\*\//g" `grep -rl "END RELEASE \*\*/" * | grep -v svn`

从release版代码再变回debug版只需要把过程逆过来就可以,代码如下:

#!/bin/sh
sed -i "s/\/\*\* IF DEBUG \*\*\//\/\*\* IF RELEASE/g" `grep -rl "/\*\* IF DEBUG \*\*/" * | grep -v svn`
sed -i "s/\/\*\* END \*\*\//END RELEASE \*\*\//g" `grep -rl "/\*\* END \*\*/" * | grep -v svn`

在go代码中标注debug代码的示例:

/** IF DEBUG **/
import "fmt"
import "time"
/** END **/

/** IF DEBUG **/
t2 := time.Now().UnixNano()
/** END **/