Go Einstiegshandbuch

Dieser Artikel führt Sie in die Grundlagen der Go-Sprache ein. Rein syntaktisch betrachtet ist sie nicht schwer zu erlernen – Sie können in wenigen Tagen loslegen. Aber der Tradition folgend, müssen wir vor dem offiziellen Start zunächst etwas über ihren Hintergrund und Ursprung erfahren.
Hintergrund
Die Go-Sprache wurde von drei Größen gemeinsam entwickelt:
- Ken Thompson, Turing-Preisträger, Gründer von Unix, Erfinder der B-Sprache, Erfinder der C-Sprache
- Rob Pike, einer der Autoren des Plan9-Betriebssystems, einer der Erfinder von UTF-8, führender Designer von Go
- Robert Griesemer, Entwickler der JS V8-Engine, der Jüngste der drei
Außerdem gibt es Renee French, die Ehefrau von Rob Pike, die das Logo von Go entwarf – ein blaues Murmeltier.

Eines Tages fühlten sich drei Ingenieure während des langen Wartens auf die Kompilierung eines C++-Projekts sehr gelangweilt. In genau diesem Moment kam Rob Pike ein neuartiges Konzept in den Sinn: Er wollte eine einfache, kleine, schnell kompilierende Programmiersprache mit ordentlicher Leistung entwerfen, damit sie nicht bei jeder Kompilierung ewig warten mussten. Nach einem kurzen Brainstorming hielten die drei am 20. September 2007 ein kurzes Meeting ab und begannen, den ersten Prototyp dieser Sprache zu diskutieren und zu entwerfen. In diesem Moment wurde Go geboren. Später zog dieses kleine Team immer mehr gleichgesinnte Entwickler an, und am 10. November 2009 veröffentlichte Google die Go-Sprache offiziell als Open Source unter der BSD-3-Clause-Lizenz, brachte eine erste Vorabversion heraus und bildete ein offizielles Entwicklungsteam.
Hinweis
Es ist erwähnenswert, dass Sie sie an anderen Orten vielleicht Golang nennen hören – auch das Github-Repository dieser Website heißt Golang-Doc – aber ihr offizieller Name war immer Go. Da die Domain go frühzeitig registriert wurde, verwendete die offizielle Website golang.org, weshalb spätere Neuankömmlinge dachten, sie hieße Golang.

Später, nach drei Jahren Design und Entwicklung, veröffentlichte das Go-Team im März 2012 die erste offizielle Version Go 1.0 (zu diesem Zeitpunkt waren die Toolchain und Laufzeitumgebung von Go noch in C geschrieben; erst mit Go 1.5 wurde der Self-Hosting abgeschlossen). Danach wurden jedes Jahr zwei kleinere Updates veröffentlicht, und das Projekt wird bis heute betrieben und gepflegt.
Die drei Gründer haben sich eigentlich schon früh zurückgezogen. Den größten Teil der Zeit war Russ Cox der Teamleiter. Er war bereits an der Entwicklung beteiligt, bevor Go öffentlich angekündigt wurde, und leitete das Go-Team 12 Jahre lang, bis er im August 2024 zurücktrat. Austin Clements übernahm die Leitung der weiteren Entwicklungsarbeit.
Wenn Sie tiefer in die Geschichte von Go eintauchen möchten, besuchen Sie Go History für weitere Informationen.
Merkmale
- Einfache Syntax Go hat einen Kompromiss zwischen Freiheit und Flexibilität geschlossen und dafür bessere Wartbarkeit und eine sanfte Lernkurve erhalten.
- Bereitstellungsfreundlich Die statisch kompilierte Binärdatei von Go hängt nicht von zusätzlichen Laufzeitumgebungen ab, und die Kompilierungsgeschwindigkeit ist ebenfalls sehr hoch.
- Cross-Kompilierung Go kann mit nur zwei Parametern zur Kompilierzeit Programme für andere Plattformen erstellen.
- Native Nebenläufigkeit Go unterstützt Nebenläufigkeit auf natürliche Weise. Mit nur einem Schlüsselwort kann eine asynchrone Coroutine gestartet werden.
- Garbage Collection Go verfügt über eine hervorragende GC-Leistung; in den meisten Fällen beträgt die GC-Latenz weniger als 1 Millisekunde.
- Umfangreiche Standardbibliothek Von String-Verarbeitung bis Quellcode-AST-Analyse – die leistungsstarke und umfangreiche Standardbibliothek ist das solide Fundament von Go.
- Vollständige Toolchain Go hat eine vollständige Entwicklungs-Toolchain, die Kompilierung, Tests, Abhängigkeitsmanagement, Performance-Analyse und mehr abdeckt.
Go hat Vererbung aufgegeben, OOP abgeschwächt und auf Funktionen wie Generics, Lambda-Ausdrücke und ähnliche Merkmale verzichtet. Es verfügt über gute Leistung und eine niedrige Einstiegshürde. Es eignet sich für die Entwicklung von Cloud-Diensten, Anwendungsservern und Netzwerkprogrammierung. Es verfügt über einen integrierten GC, sodass Entwickler den Speicher nicht manuell verwalten müssen. Statische Kompilierung und Cross-Kompilierung sind auch für den Betrieb sehr vorteilhaft.
Go hat natürlich auch einige Nachteile, wie die kritisierte Fehlerbehandlung, unvollständige Generics, eine zwar umfangreiche Standardbibliothek aber nur wenige eingebaute Datenstrukturen, ein Übermaß an interface{}-Typen, keine Enumerationstypen. Darüber hinaus ist das Go-Entwicklungsteam sehr eigensinnig und hört nicht gut auf die Community. (Im Vergleich dazu macht Rust bei Fehlerbehandlung, Generics, Abhängigkeitsmanagement, Enumerationen und Schnittstellen vieles besser.)
Insgesamt müssen wir eine Sprache differenziert betrachten. Als engineering-orientierte Sprache kann Go die Untergrenze eines Teams erheblich erhöhen. Selbst wenn die Entwickler noch so unerfahren sind, wird ein Minimum garantiert – es kommt selten vor, dass ein einziger schlechter Entwickler das ganze Projekt ruiniert. Gleichzeitig ermöglichen die einfache Syntax und die niedrige Lernkurve einen schnellen Einstieg in ein Projekt. Obwohl Go erst etwas mehr als zehn Jahre auf dem Markt ist, haben es bereits viele Unternehmen als bevorzugte Sprache gewählt, was zeigt, dass Go zunehmend populär wird.
Übrigens ist Go eine vollständig Open-Source-Sprache, deren Entwicklung von der Community und Google gemeinsam gepflegt wird. Die offizielle Adresse befindet sich im Google-Repository, auf Github gibt es ein identisches Spiegel-Repository. Wenn Sie möchten, können Sie sich an der Gestaltung der Sprache beteiligen.
Offizielle Website: The Go Programming Language
Google Open-Source-Repository: google/go: Google Open Source
Github Repository: golang/go: The Go programming language
TIP
Der Autor hat bereits einen PR an Go eingereicht. Wenn Sie erfahren möchten, wie Sie zu Go beitragen können, schauen Sie sich diesen Artikel an: Wie man zu Go beiträgt.
Viele haben wahrscheinlich schon von Rust gehört, einer leistungsstarken universellen Programmiersprache, deren Entstehung ein Jahr vor Go liegt. Go 1 wurde im März 2012 veröffentlicht, Rust im Mai 2015. Beide sind moderne Sprachen. Der Autor mag beide sehr, sie entwickeln sich in unterschiedliche Richtungen. Wenn Sie mit der Laufzeiteffizienz und Ausdrucksstärke von Go nicht zufrieden sind, probieren Sie Rust aus – allerdings ist die Lernkurve bei Weitem nicht so einfach wie bei Go.
Installation
Go-Download: Downloads - The Go Programming Language

Stable Version bezeichnet die zwei aktuell gewarteten stabilen Versionen, Archived Version bezeichnet nicht mehr gewartete historische Versionen. Weitere Informationen zu Wartungsregeln und historischen Versionen finden Sie unter Changelog.
Windows
Für Windows gibt es zwei Installationstypen: Installer und Archive. Ersteres ist ein Installationspaket, bei dem man nur klicken muss. Letzteres wird empfohlen, da Sie sich dabei besser mit der Verzeichnisstruktur von Go vertraut machen und bei zukünftigen Problemen nicht hilflos sind. Laden Sie die ZIP-Datei herunter, die den Go-Quellcode, die Toolchain und einige Dokumentationen enthält. Entpacken Sie sie in einen bestimmten Pfad und konfigurieren Sie dann zwei Systemumgebungsvariablen:
- GOROOT - Installationspfad von Go
- GOPATH - Pfad für Go-Abhängigkeiten
Nachdem Sie dies eingerichtet haben, fügen Sie der Systemumgebungsvariable PATH zwei neue Einträge hinzu:
%GOROOT%\bin: Dies ist die Adresse der Go-Binärprogramme%GOPATH%\bin: Hier werden zukünftig heruntergeladene Binärdateien von Drittanbieter-Abhängigkeiten gespeichert
Führen Sie den Befehl go version in PowerShell aus. Wenn die Version korrekt angezeigt wird, war die Installation erfolgreich.
PS C:\user\username> go version
go version go1.21.3 windows/amd64Für Updates laden Sie einfach die neue ZIP-Datei herunter und überschreiben das ursprüngliche Installationsverzeichnis.
Linux
Am Beispiel von Ubuntu: Kopieren Sie den Link der gewünschten Version und laden Sie sie lokal herunter.
$ wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gzEntpacken Sie in das angegebene Verzeichnis:
$ tar -C ~/go -xzf go1.21.1.linux-amd64.tar.gzSetzen Sie die Umgebungsvariablen in der Datei $HOME/.bashrc:
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/binÜberprüfen Sie nach Abschluss die installierte Version:
$ go version
go version go1.21.1 linux/amd64Für Updates laden Sie einfach die neue tar.gz-Datei herunter und überschreiben das ursprüngliche Installationsverzeichnis.
Installationsverwaltung
Die oben beschriebene Installationsmethode reicht für die grundlegende Nutzung aus. Persönlich empfehle ich folgende Verzeichnisstruktur für Go und abgeleitete Dateien:
go/
|
|--root/
| |
| |--go1.21.3/
| |
| |--go1.20.10/
|
|--mod/
| |
| |--bin/
| |
| |--libs/
|
|--cache/
|
|--temp/
|
|--envBedeutung:
go/rootVerzeichnis zum Speichern der verschiedenen Go-Versionengo/modentsprichtGOPATHgo/mod/libsentsprichtGOMODCACHE, also dem Speicherort der heruntergeladenen Drittanbieter-Abhängigkeitengo/mod/binentsprichtGOBIN, Speicherort der Binärdateien von Drittanbieter-Abhängigkeitengo/cacheentsprichtGOCACHE, Speicherort der Cachedateiengo/tempentsprichtGOTMPDIR, Speicherort der temporären Dateiengo/enventsprichtGOENV, globale Konfigurationsdatei für Umgebungsvariablen
Bei dieser Methode müssen Sie bei Updates das ursprüngliche Installationsverzeichnis nicht überschreiben. Speichern Sie einfach die neue Version im go/root-Verzeichnis und ändern Sie die GOROOT-Systemumgebungsvariable auf den Ordner der gewünschten Version. Standardmäßig liest env den Pfad GOROOT/env. Durch Setzen der GOENV-Systemvariablen wird diese von GOROOT getrennt, sodass Änderungen der Go-Umgebungsvariablenkonfiguration bei Versionswechseln vermieden werden. Hier ist die ursprüngliche Konfiguration der env-Datei:
GO111MODULE=on
GOCACHE=go/cache
GOMODCACHE=go/mod/libs
GOBIN=go/mod/bin
GOTMPDIR=go/tempDies ist nur ein vom Autor bevorzugter Verzeichnisstil. Weitere Informationen zu Umgebungsvariablen finden Sie unter Befehle - Umgebungsvariablen. Sie können alles ganz nach Ihren persönlichen Vorlieben anpassen.
Mehrere Versionen verwalten
Ich habe ein Tool zur Verwaltung mehrerer Versionen geschrieben: govm. In Kombination mit der oben genannten Verzeichnisstruktur ist es am besten geeignet. Es kann mehrere lokale Go-Versionen verwalten, zwischen Versionen wechseln, nach anderen Versionen suchen und diese herunterladen und lokal installieren.
$ govm search 1.22 -n 10
go1.22.6 76 MB
go1.22.5 76 MB
go1.22.4 76 MB
go1.22.3 76 MB
go1.22.2 76 MB
go1.22.1 76 MB
go1.22.0 76 MB
$ govm install 1.22.4
Fetch go1.22.4 from https://dl.google.com/go/go1.22.4.windows-amd64.zip
Downloading go1.22.4.windows-amd64.zip 100% |████████████████████████████████████████| (76/76 MB, 32 MB/s) [2s]
Extract go1.22.4.windows-amd64.zip to local store
Remove archive from cache
Version go1.22.4 installed
$ govm use 1.22.4
Use go1.22.4 now
# Shell neu starten
$ go version
go version go1.22.4 windows/amd64Wenn Sie lernen möchten, wie man CLI-Tools mit Go schreibt und nichts dagegen haben, können Sie govm als Referenzprojekt verwenden – es ist ebenfalls in Go geschrieben.
Editor
Für Go-IDEs empfehle ich derzeit nur folgende zwei:
- GoLand: Von JetBrains, leistungsstark, umfassende Unterstützung, aber kostenpflichtig. Sie können auch die Community Edition von IDEA mit Plugins verwenden.
- VSCode: Kostenlos, der universelle Editor, mit Plugins können Sie jede Sprache schreiben.
Wenn ein anderer Editor besser zu Ihren Gewohnheiten passt, können Sie diesen natürlich verwenden. Welchen Editor Sie verwenden, ist letztendlich egal. Wenn Sie nur kurzen Übungscode schreiben möchten, können Sie das offizielle Go Playground ausprobieren, um Go-Code online auszuführen.
TIP
Wenn Sie JetBrains Toolbox verwenden, können Sie mein CLI-Tool AutoToolBox ausprobieren, das ein Rechtsklick-Menü für Toolbox unter Windows generiert. So sieht es aus:

Worte zum Abschluss
Go ist insgesamt nicht besonders schwierig. Wenn Sie Erfahrung mit anderen Sprachen haben, wird es sehr einfach zu lernen sein. Wenn Sie während des Lernens auf schwierige Punkte stoßen, können Sie diese zunächst überspringen. Beim Erlernen jeder Sprache sollten Sie zunächst einen groben Überblick über die Syntax und Struktur gewinnen, bevor Sie sich mit spezifischen Funktionen und Details befassen. Auch diese Dokumentation folgt dieser Philosophie und eignet sich für den Einstieg. Der Autor selbst ist nur ein gewöhnlicher Student, Fehler und Auslassungen sind unvermeidlich. Wenn Sie Fehler finden, können Sie einen PR auf Github einreichen. Wenn Ihnen die Dokumentation gefällt, können Sie auf Github einen Stern vergeben.
Wenn Sie ein starker OOP-Sprachen-Entwickler sind, z. B. Java oder C#, bringen Sie bitte keine OOP-Denke mit. Sonst werden Sie viele Designs von Go verwirrend finden, und das Schreiben von Code wird sehr unangenehm sein – so erging es dem Autor anfangs auch.
Übersicht
Im Folgenden finden Sie eine kurze Einführung in den Inhalt dieser Website, damit Sie gezielt lesen können. Leere Seiten bedeuten, dass sie noch nicht aktualisiert wurden.
- Spracheinstieg: Hauptsächlich Inhalte über die Go-Sprache selbst, eher theoretisch.
- Syntax-Grundlagen: Sehr grundlegende Syntax wie
if,forund ähnliche Regeln. - Syntax-Fortgeschritten: Go-spezifische Themen wie Module, Tests, Coroutines usw.
- Standardbibliothek: Kurze Einführung in die mitgelieferte Standardbibliothek von Go. Da die Standardbibliothek sehr umfangreich ist, wird sie nach Zufall aktualisiert.
- Implementierungsprinzipien: Interne Designprinzipien von Go wie Coroutine-Scheduling, Speicherverwaltung, Garbage Collection usw.
- Syntax-Grundlagen: Sehr grundlegende Syntax wie
- Community-Ökosystem: Hauptsächlich die Go-Umgebung, eher anwendungsorientiert.
- Datenbanken: Betrieb gängiger Datenbanken mit Go.
- Microservices: Vorstellung einiger Go-bezogener Microservice-Tools.
- Drittanbieter-Bibliotheken: Vorstellung einiger in Go geschriebener Drittanbieter-Bibliotheken, nach Zufall aktualisiert. Sie können auch direkt in der Abhängigkeitsübersicht nachschauen.
Gehen Sie zu Los geht's, um mit dem Lernen zu beginnen.
