Golangのサポートはありますか
#define DEBUG
#ifdef DEBUG
fmt.Println("Debug message...");
#endif
それで、ランタイムオーバーヘッドがゼロのデバッグバージョンをビルドできますか?
Goにはプリプロセッサやマクロシステムがありません。あなたができることは、-tags
フラグを介してビルドし、ビルド制約を使用するためにタグを渡すことです。これを行うには、同じソースの2つのバージョンが必要であり、タグが存在するかどうかに応じてビルドされるのは1つだけです。
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でコンパイルされます
linuxまたはMacで作業する場合、「m4 "コマンドを試すことができます。このコマンドはマクロです。この問題にちょうど合うプロセッサー。
「go build」の前にm4コマンドを実行するMakefileを作成すると、「go build -tags ...」を使用するのと同じことができ、より多くのカスタマイズをサポートして、もちろん作業を保存できます。
例えば:
これらをgoファイル(main.goなど)内に記述します。
define(DEBUG)
ifdef(`DEBUG',
fmt.Println("Debug message...");
)
これらをMakefileファイル内に書き込みます。
all:*.go
mv main.go main.go.bak
m4 main.go.bak > main.go
go build
mv main.go.bak main.go
次に「make」を実行します。
不利益: