Skip to content

Latest commit

 

History

History
109 lines (65 loc) · 7.58 KB

File metadata and controls

109 lines (65 loc) · 7.58 KB

#1.3 Go Befehle

Go Befehle

Die Programmiersprache Go bringt viele nützliche Befehle für diverse Anwendungszwecke mit sich. Du erhälst eine Übersicht, indem Du go im Terminal ausführst.

Figure 1.3 Eine detaillierte Übersicht aller Go Befehle

Jeder Befehl kann nützlich für uns sein. Betrachten wir den Anwendungszweck von ein paar Befehlen.

go build

Dieser Befehl ist für die Kompilierung und das Testen des Quellcodes verantwortlich. Abhängige Pakete werden ebenfalls mit kompiliert, sofern dies nötig ist.

  • Wenn das Paket nicht main entspricht, wie unser mymath Paket aus Abschnitt 1.2 nicht ausgeführt, nachdem Du go build ausgeführt hast. Solltest Du Paket-Dateien mit der Endung .a in $GOPATH/pkg, nutze stattdessen go install.
  • Sollte das Paket main entsprechen, dann wird eine ausführbare Binärdatei im selben Verzeichnis generiert. Möchtest Du stattdessen, dass Die Binärdatei in $GOPATH/bin generiert wird, nutze den Befehl go install oder go build -o ${PATH_HERE}/a.exe..
  • Befinden sich viele Dateien in einem Ordner, aber Du möchtest nur eine bestimmte Datei kompilieren, dann füge den Dateinamen am Ende von go build hinzu. Ein Beispiel wäre go build a.go. go build wird alle Dateien im selben Ordner kompilieren.
  • Du kannst alternativ auch den Namen der ausführbaren Binärdatei ändern. So erhält das mathapp Projekt (aus Abschnitt 1.2) mit dem Befehl go build -o astaxie.exe den Namen astaxie.exe, statt mathapp.exe. Der Standardname ist immer der Verzeichnisname (sofern es kein main Paket ist) oder der Name der ersten, ausführbaren Datei (main Paket).

Laut den Spezifikationen der Go Programmiersprache sollten Pakete den Namen tragen, der nach dem Schlüsselwort package in der ersten Zeile einer Quellcodedatei steht. Dieser muss nicht gleich dem Verzeichnisnamen sein und die ausführbare Binärdatei wird standardmäßig den Verzeichnisnamen annehmen.

  • go build ignoriert Dateien, die mit _ oder . beginnen.

  • Möchtest Du für jedes Betriebssystem andere Quellcodedateien erstellen, dann kannst Du den Systemnamen als Suffix im Dateinamen verwenden. Stell Dir vor, Du hast Quellcodedateien zum Laden von Arrays. Sie könnten nach dem folgenden Schema benannt sein:

    array_linux.go | array_darwin.go | array_windows.go | array_freebsd.go

go build wählt als Suffix den Namen, der mit Deinem Betriebssystem assoziiert ist. So wird einzig array_linux.go auf Linux-Systemen kompiliert. Alle anderen Dateien werden ignoriert.

go clean

Dieser Befehl löscht alle Dateien, die vom Kompiler generiert wurden, einschließlich der unten gelisteten Dateien und Verzeichnisse.

_obj/            // Altes Verzeichnis von object, als Überreste von Makefiles
_test/           // Altes Verzeichnis von test, als Überreste von Makefiles
_testmain.go     // Altes Verzeichnis von gotest, als Überreste von Makefiles
test.out         // Altes Verzeichnis von test, als Überreste von Makefiles
build.out        // Altes Verzeichnis von test, als Überreste von Makefiles
*.[568ao]        // object Dateien, als Überreste von Makefiles

DIR(.exe)        // Generiert von go build
DIR.test(.exe)   // Generiert von go test -c
MAINFILE(.exe)   // Generiert von go build MAINFILE.go

Überlicherweise nutze ich diese Befehle zum Säubern von Projekten, bevor ich diese auf Github hochlade. Sie sind nützlich für lokale Tests, aber nutzlos zur Versionskontrolle.

go fmt und gofmt

Programmierer, die mit C/C++ arbeiten, sollten wissen, das Personen immer darüber debattieren, welcher Code-Stil besser sei: K&R-Stil oder ANSI-Stil. In Go gibt nur einen einzigen, welcher vorrausgesetzt wird. So müssen zum Beispiel offene, geschwungene Schleifen nur am Ende von Zeilen eingefügt werden und können nicht in einer eigenen stehen, da dies einen Kompilierungsfehler zur Folge hat! Jedoch musst Du Dir diese Regeln nicht merken. go fmt übernimmt diese Aufgabe für Dich. Führe einfach den Befehl go fmt <Dateiname>.go im Terminal aus. Persönlich nutze ich diesen Befehl selten, da die meisten IDEs diesen Befehl meist automatisch ausführen, sobald ich eine Datei speichere. Im nächsten Abschnitt werde ich näher auf IDEs eingehen.

go fmt ist nur ein Alias, welcher den Befehl gofmt -l -w bei Paketen anwendet, die in den Importpfaden genannt werden.

Wir nutzen üblicherweise gofmt -w statt go fmt. Somit wird Deine Quellcodedatei nicht umgeschrieben, nachdem sie formatiert wurde. gofmt -w src formatiert dagegen ein gesamtes Projekt.

go get

Dieser Befehl ermöglicht es, Remote Packages herunterzuladen. Bisher untersützt es Bitbucket, Github, Google Code und Launchpad. Es geschehen zwei Dinge, nachdem wir den Befehl ausgeführt haben. Als erstes lädt Go den Quellcode herunter und führt danach go install aus. Bevor Du go get nutzt, solltest Du vorher die benötigten Versionskontrollsysteme herunterladen.

BitBucket (Mercurial und Git)
Github (Git)
Google Code (Git, Mercurial, Subversion)
Launchpad (Bazaar)

Um den Befehl auch nutzen zu können, musst Du diese Programme korrekt installieren. Vergiss nicht, $PATH zu setzen. Angemerkt sei, dass auch angepasste Domainnamen unterstützt werden. Nutze go help remote, um weitere Informationen zu erhalten.

go install

Dieser Befehl kompiliert alle Pakete und generiert Dateien, die entweder nach $GOPATH/pkg oder $GOPATH/bin verschoben werden.

go test

Dieser Befehl läd alle Dateinen, dessen Name *_test.go beinhaltet, generiert Dateien für Tests und gibt anschließend dessen Ergebnisse aus, die wie folgt aussehen können:

ok   archive/tar   0.011s
FAIL archive/zip   0.022s
ok   compress/gzip 0.033s
...

Es nutzt standardmäßig alle vorhanden Test-Dateien. Schaue unter go help testflag für Details.

godoc

Viele Personen sagen, man brauche kein Dokumentationswerkzeug von Dritten, wenn man Go nutzt (obwohl ich mit CHM selbst eins schrieb). Go besitzt ein mächtiges Wergzeug, um Dokumentationen nativ zu verwalten.

Aber wie können wir bestimmte Informationen über ein Paket einsehen? So möchtest Du zum Beispiel mehr über das builtin Paket wissen. Nutze hierfür godoc builtin. Mach es mit godoc net/http genauso, wenn Du mehr über das http Paket in Erfahrung bringen möchtest. Ist jedoch eine spezifische Funktion gefragt, benutze die godoc fmt Printf und godoc -src fmt Printf Befehle, um den Quellcode zu betrachten.

Führe den Befehl godoc -http=:8080 aus und öffne dann 127.0.0.1:8080 in Deinem Browser. Nun solltest Du eine Deiner Sprache angepassten (lokalisierten) Version von golang.org sehen. So kannst Du nicht nur die Dokumentationen zu Paketen der Standardbibliothek ansehen, sondern auch aller Pakete, die unter $GOPATH/pkg gepspeichert sind. Dies ist großartig für Menschen, die von der Great Firewall of China im Internet eingeschränkt werden.

Andere Befehle

Go verfügt über noch mehr Befehle, die wir nicht behandelt haben.

go fix // Überführt alten Go Code von Go1 oder niedriger in eine neuere Version
go version // Erhalte nähere Informationen über Deine Go Version
go env // Zeigt die alle Umgebungsvariablen von Go
go list // Listed alle installierten Pakete
go run // Kompiliert temporäre Dateien und führt diese aus

Es gibt noch weitere Aspekte zu den Befehlen, über die ich nicht gesprochen habe. Du kannst go help <command> nutzen, um diese nachzulesen.

Links