Go programmieren für Dummies. Wei-Meng Lee
$ go build
Wenn Sie nun in das Verzeichnis Kapitel 1
schauen, befindet sich dort eine neue Datei namens Kapitel_1
(Kapitel_1.exe
unter Windows).
Um diese Datei unter macOS auszuführen, geben Sie Folgendes im Terminal ein:
$ ./Kapitel_1
Unter Windows verwenden Sie folgenden Befehl:
C:\users\IhrName\Kapitel 1>Kapitel_1
Sie sollten nun eine Ausgabe ähnlich der folgenden sehen:
Hallo Welt!
2020-10-01 12:01:13.412568 +0800 +08 m=+0.000365532
Kompilieren von Programmen für mehrere Betriebssysteme
Bei der Installation von Go werden automatisch mehrere Go-Umgebungsvariablen eingerichtet, damit Ihre Go-Programme korrekt funktionieren. Insbesondere erkennt das Installationsprogramm bestimmte Werte der Host-Architektur und des genutzten Betriebssystems, die für die Umgebungsvariablen GOHOSTARCH
beziehungsweise GOHOSTOS
nötig sind. Die Werte dieser zwei Variablen geben die Zielplattform an, für die Ihre Programme kompiliert werden.
Wenn Sie sich diese Werte der Go-Umgebungsvariablen anzeigen lassen möchten, nutzen Sie den Befehl env
:
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/weimenglee/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
…
…
PKG_CONFIG="pkg-config"
Um Ihr Programm für ein anderes Betriebssystem zu kompilieren, müssen Sie zwei weitere Umgebungsvariablen anpassen: GOOS
und GOARCH
. Diese beiden Variablen konfigurieren das Ziel-Betriebssystem anhand der in Tabelle 1.1 gezeigten Werte.
Betriebssystem | GOOS | GOARCH |
---|---|---|
macOS |
darwin
|
amd64
|
Linux |
linux
|
amd64
|
Windows |
windows
|
amd64
|
Tabelle 1.1: Umgebungsvariablen für verschiedene Betriebssysteme
Um ein Programm für macOS zu kompilieren, nutzen Sie die folgenden Befehle und Optionen:
$ GOOS=darwin GOARCH=amd64 go build -o Kapitel_1-mac
Wenn Go in naher Zukunft nativ auf Apple Silicon portiert wird, wäre der Wert von
GOARCH
entsprechend arm64
.
Um ein Programm für Windows OS zu kompilieren, sind folgende Befehle und Optionen nötig:
$ cd ~/"Kapitel 1"
$ GOOS=windows GOARCH=amd64 go build -o Kapitel_1-windows.exe
Über die Option
-o
(kurz für Output) können Sie einen Namen für die ausführbare Datei angeben.
Der vorgenannte Befehl kompiliert das Paket im Verzeichnis Kapitel 1
für Windows und speichert die ausführbare Datei als Kapitel_1-windows.exe
.
Um ein Programm für Linux zu kompilieren, nutzen Sie folgende Befehle und Optionen:
$ GOOS=linux GOARCH=amd64 go build -o Kapitel_1-linux
Falls Sie mit Go auf dem Raspberry Pi arbeiten, nutzen Sie für
GOARCH
den Wert arm64
.
Wenn auf Ihrem Computer macOS oder Linux läuft, können Sie die für die jeweilige Plattform erstellten ausführbaren Dateien mit dem file
-Befehl überprüfen:
$ file Kapitel_1-mac
Kapitel_1-mac: Mach-O 64-bit executable x86_64
$ file Kapitel_1-windows.exe
Kapitel_1-windows.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
$ file Kapitel_1-linux
Kapitel_1-linux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=bSETwZgNDR5vlulRHnzw/KNpENRt9Hipd8Nu7HGDg/v38ZPzDs35yMw33hUxoz/Y_cNfU8fID2cCtz36hCq, not stripped
Vergleich von Go mit anderen Programmiersprachen
Beim Erlernen einer neuen Programmiersprache ist es oft hilfreich, einen Vergleich mit anderen Programmiersprachen anzustellen, die Sie vielleicht schon kennen. Im Idealfall helfen Ihnen Ihre vorhandenen Kenntnisse auch bei der neuen Sprache.
In diesem Abschnitt vergleiche ich Go mit zwei branchenweit besonders häufig verwendeten Programmiersprachen, nämlich mit Java und Python. Gelegentlich ist auch ein Vergleich mit C sinnvoll, da Go syntaktische Ähnlichkeiten zu dieser Sprache aufweist. Zudem wird Go oft nachgesagt, es vereine die Geschwindigkeit von C mit der Produktivität von Python.
Wenn Sie noch keine dieser Programmiersprachen in Ihrem Repertoire haben, ist das nicht schlimm. Alle hier erwähnten Funktionen werden in den weiteren Kapiteln dieses Buches ausführlich vorgestellt.
Syntax
In Sachen Syntax weist Go mehr Ähnlichkeiten mit den Programmiersprachen C und Java auf, bei denen Codeblöcke in geschweifte Klammern gesetzt werden. Python hingegen rückt die Programmzeilen ein, um verschiedene Codeblöcke auch visuell voneinander zu trennen.
Ebenso wie Python stellt Go Funktionen in den Mittelpunkt, während sich bei Java alles um Klassen dreht und sogar Funktionen in Klassen eingeschlossen werden müssen.
Im Gegensatz zu Python und Java bietet Go keine Unterstützung für die objektorientierte Programmierung (OOP) und Vererbung. Dafür gibt es in Go zur Strukturierung sogenannte Interfaces und Structs, die genau wie Klassen funktionieren.
Wie Java nutzt auch Go die statische Typisierung. Python ist eine dynamisch typisierte Sprache.
Kompilierung
Während Python und Java in Bytecode kompiliert werden, der dann übersetzt und auf einer virtuellen Maschine ausgeführt wird, liefert Go beim Kompilieren direkt Maschinencode. Aus diesem Grund ist Go besonders leistungsfähig.
Genau wie Python und Java unterstützt auch Go die automatische Speicherbereinigung (Garbage Collection). Bei diesem Vorgang zur Speicherverwaltung sucht der Garbage Collector nach Objekten, die von einem Programm nicht mehr benötigt werden, um den dadurch belegten Speicherplatz wieder freizugeben.
Python verschlingt eine