Was ist Go und wofür eignet sich die Sprache?
Autor: Redaktion Domeny.ForSale Veröffentlicht
Kurz erklärt: Go ist eine universell einsetzbare Programmiersprache, die bei Google entwickelt wurde und als Open-Source-Projekt weiterentwickelt wird. Sie dient vor allem zum Aufbau von Serverdiensten, Kommandozeilenwerkzeugen und Infrastruktursoftware. Go verbindet eine vergleichsweise einfache Syntax mit der Kompilierung zu Maschinencode und integrierten Mechanismen für Nebenläufigkeit. Damit lassen sich mehrere Aufgaben organisieren, deren Ausführung sich zeitlich überschneiden kann.
Was unterscheidet Go von anderen Sprachen?
Der offizielle Name der Sprache lautet Go, auch wenn dir in Suchmaschinen und Gesprächen die Bezeichnung „Golang“ begegnet. Diese bezeichnet weder eine andere Version noch eine eigenständige Technologie. Go hat auch nichts mit dem gleichnamigen Brettspiel zu tun.
Go ist eine statisch typisierte Sprache: Datentypen werden während der Kompilierung geprüft, bevor das Programm ausgeführt wird. Der Compiler wandelt den Quellcode in ein Programm für das gewählte Betriebssystem und die gewählte Prozessorarchitektur um. Dabei lassen sich bestimmte Fehler früh erkennen, etwa der Versuch, Text an einer Stelle zu verwenden, an der eine Zahl erforderlich ist.
Die Sprache gibt Speicher, den das Programm nicht mehr benötigt, automatisch frei. Dafür sorgt ein Mechanismus namens Garbage Collector. Programmierer müssen nicht jeden Speicherbereich von Hand freigeben, sollten aber weiterhin den Ressourcenverbrauch im Blick behalten und Dateien sowie Verbindungen schließen.
Go beschränkt die Zahl seiner Sprachkonstrukte bewusst. Die aus Java bekannte klassische Klassenvererbung gibt es nicht; zur Organisation von Daten und Verhalten dienen unter anderem Strukturen und Interfaces. Fehler werden meist als Werte zurückgegeben, die der aufrufende Code ausdrücklich prüfen sollte.
Wofür wird Go verwendet?
Go eignet sich gut für Programme, die Netzwerkverbindungen nutzen, Anfragen verarbeiten und verschiedene Systeme miteinander verbinden. Die Standardbibliothek unterstützt unter anderem HTTP, JSON, die Arbeit mit Dateien und das Testen. Viele grundlegende Aufgaben lassen sich deshalb ohne umfangreiche Zusatzbibliotheken erledigen.
Typische Einsatzgebiete sind:
- Backend-Dienste und API — Programme auf einem Server, die einer Web- oder Mobilanwendung Daten bereitstellen.
- Kommandozeilenwerkzeuge — beispielsweise Programme, die Backups erstellen, Konfigurationen prüfen oder Deployments automatisieren.
- Infrastruktursoftware — Werkzeuge zur Verwaltung von Containern, Netzwerken und Cloud-Umgebungen. Bekannte Projekte, die Go verwenden, sind Kubernetes und Prometheus.
- Dienste zur Verarbeitung von Hintergrundaufgaben — etwa Dienste, die Nachrichten aus einer Warteschlange empfangen und Ergebnisse in einer Datenbank speichern.
Ein Onlineshop könnte beispielsweise einen eigenen Dienst in Go betreiben, der den Versandstatus bei mehreren Versandunternehmen abfragt und dem Kundenbereich eine einheitliche Antwort liefert. Die Netzwerkwerkzeuge und die Unterstützung nebenläufiger Vorgänge machen Go hier zu einer sinnvollen Wahl. Die Sprache allein löst jedoch keine Probleme mit den Limits externer API, mit Ausfällen oder mit fehlerhafter Bestelllogik.
Wie funktioniert Nebenläufigkeit in Go?
Der grundlegende Mechanismus für Nebenläufigkeit in Go sind goroutines: leichtgewichtige Aufgaben, die von der Laufzeitumgebung der Sprache verwaltet werden. Wird einem Funktionsaufruf das Schlüsselwort go vorangestellt, kann die Funktion nebenläufig zu anderen Aufgaben ausgeführt werden. Eine Goroutine ist kein eigener Betriebssystem-Thread; die Go-Laufzeitumgebung plant die Ausführung der Goroutines auf Threads.
Zur Kommunikation zwischen Aufgaben können Kanäle dienen. Über sie lassen sich Werte übertragen und Abläufe synchronisieren. Außerdem stehen Sperren zum Schutz gemeinsam genutzter Daten zur Verfügung. Die Verwendung von goroutines beseitigt nicht automatisch das Risiko von Deadlocks oder unsicheren gleichzeitigen Speicherzugriffen.
Angenommen, ein Programm soll die Erreichbarkeit von zehn Websites prüfen. Bei einem sequenziellen Vorgehen wartet es auf die Antwort einer Website, bevor es die nächste abfragt. Bei nebenläufiger Ausführung kann es mehrere Prüfungen starten und gleichzeitig auf deren Ergebnisse warten, mit einer festgelegten Höchstzahl an Verbindungen und einem Zeitlimit.
Nebenläufigkeit ist nicht dasselbe wie Parallelität. Nebenläufigkeit betrifft die Organisation von Aufgaben, Parallelität deren tatsächliche gleichzeitige Ausführung, etwa auf mehreren Prozessorkernen. Mehr goroutines garantieren kein schnelleres Programm: Die Datenbank, die Netzwerkbandbreite oder der Synchronisationsaufwand können die Leistung begrenzen.
Wann ist Go sinnvoll, wann eine andere Sprache?
Go ist eine gute Option, wenn du einen eigenständigen Netzwerkdienst oder ein Werkzeug entwickelst, das sich einfach auf Servern ausführen lassen soll. Häufig lässt sich eine einzelne ausführbare Datei bereitstellen, ohne einen separaten Interpreter installieren zu müssen. Das gilt jedoch nicht uneingeschränkt: Die Verwendung von C-Bibliotheken oder externen Dateien kann zusätzliche Abhängigkeiten mit sich bringen.
In folgenden Situationen kann eine andere Sprache praktischer sein:
- Datenanalyse und maschinelles Lernen: Python bietet meist einen bequemeren Zugang zu den Bibliotheken und Werkzeugen dieser Bereiche.
- Benutzeroberflächen im Browser: JavaScript oder TypeScript sind die übliche Wahl, um direkt mit der Benutzeroberfläche einer Website zu arbeiten.
- Weiterentwicklung einer bestehenden Java-Anwendung: Bei der bisherigen Umgebung zu bleiben, kann vorteilhafter sein, als eine weitere Sprache zu pflegen.
- Strenge Kontrolle über Speicher und Latenzen: Rust oder C++ können Anforderungen besser erfüllen, die den Einsatz eines Garbage Collectors erschweren.
Das sind Orientierungshilfen, keine Rangliste der Sprachqualität. Berücksichtige bei der Auswahl die verfügbaren Bibliotheken, die Erfahrung des Teams und die Anforderungen des jeweiligen Programms.
Wie beginnst du mit Go?
Installiere die aktuelle stabile Version nach der Anleitung auf der offiziellen Website des Go-Projekts und prüfe dabei die Anforderungen für dein System. Überprüfe anschließend die Installation mit dem Befehl go version und lege ein Verzeichnis für dein erstes Projekt an.
Speichere darin die Datei main.go:
package main
import "fmt"
func main() {
fmt.Println("Hallo, Go!")
}
Führe im Terminal go mod init beispiel/hallo aus, um ein Modul anzulegen. Ein Modul ist eine Einheit zur Organisation des Projekts und zur Verwaltung seiner Abhängigkeiten. Der Befehl go run . kompiliert das Programm und führt es aus; go build . erstellt eine ausführbare Datei. go fmt ./... sorgt für die Formatierung des Codes, während Tests mit go test ./... ausgeführt werden.
Entwickle als nächste Übung ein Programm, das den HTTP-Status einer Website prüft. Ergänze eine Fehlerbehandlung und ein Zeitlimit. Erweitere es erst danach so, dass es mehrere Adressen nebenläufig prüft.
Siehe auch: Was ist 2FA?
