2012-06-21 21 views
6

Ich versuche ein Go wrapper mit CGo für ENet zu schreiben.Bedingte Kompilierung in Go

Als ich versuchte, meinen Wrapper auf einem Mac zu kompilieren, war die Bibliothek älter und hatte ein etwas anderes Interface. 99% des Codes sind gleich, nur ein paar C-Aufrufe müssen geändert werden.

Was ist die beste Vorgehensweise für den Umgang mit einem solchen Problem in Go?
Gibt es eine Möglichkeit, bedingte Kompilierung oder bedingte Importe durchzuführen?

Antwort

1

Go hat keine bedingte Kompilierung oder bedingte Importe. Behandle die Typunterschiede im C-Code.

Are the [Go] authors opposed to preprocessing?

+0

Go hat tatsächlich bedingte Kompilierung mit Dateinamen Suffixe als andyBallholms Antwort demonstriert. –

+1

Downvoters werde hassen :). Ernsthaft, @peterSO hat die richtige Antwort für mein spezielles Problem. Stellt sich heraus, dass das Mac-Ding ein Ablenkungsmanöver ist. Das eigentliche Problem ist bei Bibliotheksversionen, die nur als '# define' in den Header-Dateien erkannt werden können. '_darwin.go' oder' _linux.go' würden das Problem nur maskieren, bis einer von ihnen ihre ENet-Bibliothek mit einer rückwärtskompatiblen Änderung aktualisiert hat. –

14

abscheiden die plattformspezifische Material in eine separate Datei, z.B. stuff.go

Jetzt stuff.go mit Versionen für die verschiedenen Plattformen, wie stuff_darwin.go (für Mac), stuff_windows.go, stuff_linux.go usw.

ersetzen Wenn eine Datei ein Suffix wie das hat Der Befehl go wird nur auf der angegebenen Plattform kompiliert.

+0

Das ist wirklich nett zu wissen. –

+8

Dokumentiert unter "Build Constrients" in der [Übersicht] (http://golang.org/pkg/go/build/#overview) des Pakets go/build. – Sonia

+1

Das ist eigentlich eine brillante Lösung (es passt Go). –