2012-06-21 28 views
6

ENetCGoを使用してGO wrapperを書こうとしています。条件付きコンパイルGo

ラップトップをMacでコンパイルしようとしたとき、ライブラリは古く、インターフェイスが少し異なります。コードの99%は、いくつかのCコールを変更するだけで同じです。

Goのような問題に対処するベストプラクティスは何ですか?
条件付きのコンパイルや条件付きインポートを行う方法はありますか?

答えて

1

条件付きコンパイルまたは条件付きインポートがありません。 Cコードの型違いを処理します。

Are the [Go] authors opposed to preprocessing?

+0

実際には、andyBallholmの答えが示すとおり、ファイル名接尾辞を使用して条件付きコンパイルが行われます。 –

+1

Downvotersは嫌いになるだろう:)。しかし、真剣に@peterSOは私の特定の問題に対する正解を持っています。 Macのことは赤いニシンです。本当の問題はライブラリのバージョンであり、ヘッダファイルで '#define'としてしか検出できません。 '_darwin.go'または' _linux.go'は、それらのうちの1人がENetライブラリを後方互換性のない変更で更新するまで問題を隠すだけです。 –

14

例えば、別のファイルにプラットフォーム固有のものを分離ファイルには、そのような接尾辞を持っている場合

は今など

(Mac用)stuff_darwin.go、stuff_windows.go、stuff_linux.go、同様に、異なるプラットフォーム用のバージョンでstuff.goを置き換えるstuff.go goコマンドは指定されたプラットフォーム上でのみコンパイルします。

+0

それは本当に知っていいです。 –

+8

go/buildパッケージの[overview](http://golang.org/pkg/go/build/#overview)の "Build Constriants"に記載されています。 – Sonia

+1

これは実際には素晴らしい解決策です(Goに合っています)。 –