Was ist Go und wofür eignet sich die Sprache?

Autor: 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:

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:

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?

Lesen Sie auch

Wie PHP-FPM PHP-Anfragen verarbeitet, sich vom Webserver unterscheidet und wie du Prozesse an Last und Hosting-Ressourcen anpasst.
BIND ist offene DNS-Serversoftware. Erfahre, welche Aufgaben sie übernimmt und wann sich der Betrieb eines eigenen Servers lohnt.
Was Polens REGON-Register und seine Kennnummer bedeuten, wie sie sich von NIP und KRS unterscheiden und wie Sie Unternehmensdaten prüfen.