#1.3 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.
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 unsermymath
Paket aus Abschnitt 1.2 nicht ausgeführt, nachdem Dugo build
ausgeführt hast. Solltest Du Paket-Dateien mit der Endung.a
in$GOPATH/pkg
, nutze stattdessengo 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 Befehlgo install
odergo 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ärego 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 Befehlgo build -o astaxie.exe
den Namenastaxie.exe
, stattmathapp.exe
. Der Standardname ist immer der Verzeichnisname (sofern es keinmain
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.
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.
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.
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.
Dieser Befehl kompiliert alle Pakete und generiert Dateien, die entweder nach $GOPATH/pkg
oder $GOPATH/bin
verschoben werden.
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.
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.
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.
- Inhaltsverzeichnis
- Vorheriger Abschnitt: $GOPATH und Workspaces
- Nächster Abschnitt: Go Entwicklungswerkzeuge