GOLANG: Richtiger Weg, func zur Laufzeit für verschiedene Betriebssysteme zu wählen

7

Ich mag die Cross-Compiler- / Plattform-Leichtigkeit für viele Aufgaben, die ich mit GO erreichen kann. Ich habe eine Frage in Bezug auf, ich denke, das Äquivalent einer #ifdef / #else Art von Konstrukt zum Ausführen / Kompilieren einer Funktion auf dem Betriebssystem basiert.

Hier ist das Szenario - sagen wir, ich habe eine Funktion, die Informationen in die Steuerstrukturen des Betriebssystems einfügt, um einen Prozess beim nächsten Start des Systems durch den Benutzer zu starten. Unter Windows würde ich den 'RUN / RUNONCE' Registrierungseintrag für den Benutzer aktualisieren, auf MAC würde es einen PLIST-Eintrag geben, usw.

Im Wesentlichen möchte ich jemanden analog dazu schreiben können (oder OS spezifische Funktionen überladen haben):

%Vor%

Bei der statischen Kompilierung werden alle Routinen, die nicht aufgerufen werden, als Kompilierungsfehler gekennzeichnet. Im Idealfall möchte ich meine "doSpecificOS ()" -Funktionen in #ifdef WINDOWS, #ifdef MAC-Blocktypen umgeben - was ist der richtige Weg, dies zu erreichen? Meine Hoffnung ist, dass ich nicht für jede Betriebssystemplattform mehrere Projektbäume desselben Programms erstellen muss.

Thx!

    
user2644113 06.12.2013, 13:04
quelle

3 Antworten

12

Sie könnten Dateien mit folgendem Muster erstellen: <pkgname>_<osname>.go

Zum Beispiel:

  • ihr_paket_linux.go
  • Ihr_Paket_darwin.go
  • dein_paket_windows.go

Jede Datei könnte Funktionsdefinitionen für konkrete Betriebssysteme enthalten, in Ihrem Fall ist es func setStartupProcessLaunch() .

Sie können sehen, wie es im Standardpaket os / signal zum Beispiel .

    
maxbublis 06.12.2013 14:11
quelle
9

Sie können über Constraints bauen hier Ссылка lesen (Sie können drei Dateien erstellen, Jede Datei hat die Logik für ein bestimmtes Betriebssystem Oder Sie können die Laufzeit.GOOS für die Zeichenfolge des Betriebssystemnamens überprüfen

    
nvcnvn 06.12.2013 13:39
quelle
0

Sie könnten Ihre Funktionen in ein Array oder eine Map einfügen, wenn sie alle die gleiche Anzahl / Art von Argumenten haben und denselben Rückgabetyp haben.

Hier ein Beispiel zur Veranschaulichung:

%Vor%

Und die Ausgabe ist:

  

Aufruf von functionMap ["Windows"]: Hi von windowsFunc (123)
  Aufruf von functionArray [1]: Hi von linuxFunc (456)

    
Michael 06.12.2013 13:31
quelle

Tags und Links