2012-06-21 118 views
6

我正在嘗試使用CGo來編寫Go wrapper,其中包含ENetGo中的條件編譯

當我試圖在Mac上編譯我的包裝時,庫更舊,並且接口略有不同。只有幾個C調用需要改變,99%的代碼是相同的。

在Go中處理類似問題的最佳做法是什麼?
有沒有辦法做條件編譯或條件導入?

回答

1

Go沒有條件編譯或條件導入。處理C代碼中的類型差異。

Are the [Go] authors opposed to preprocessing?

+0

Go實際上使用文件名後綴進行條件編譯,正如andyBallholm的答案所示。 –

+1

Downvoters會討厭:)。儘管如此,@peterSO對於我的特殊問題有正確的答案。原來Mac的東西是紅鯡魚。真正的問題是庫的版本,它只能在頭文件中被檢測爲'#define'。 '_darwin.go'或'_linux.go'只會掩蓋問題,直到其中一個用更新後的不兼容更新它們的ENet庫。 –

14

分離出特定於平臺的東西到一個單獨的文件中,例如stuff.go

現在用的版本不同平臺取代stuff.go,像stuff_darwin.go(適用於Mac),stuff_windows.go,stuff_linux.go等

如果文件中有這樣的一個後綴,go命令將僅在指定的平臺上編譯它。

+0

這真的很高興知道。 –

+8

在package go/build的[overview](http://golang.org/pkg/go/build/#overview)中的「Build Constriants」中有記錄。 – Sonia

+1

這實際上是一個很棒的解決方案(它符合Go)。 –