Warum Go?

July 8, 2020

Go ist einfach, überall, schnell, robust und (zum Glück) ein kleines bisschen langweilig!

Die Programmiersprache Go vereint einige sehr attraktive Eigenschaften in sich. Die Sprache ist klein - nur 25 Schlüsselworte, entsprechend ist die Spezifikation kurz und dabei relativ leicht zu lesen. Der Compiler ist schnell, auch bei größeren Projekten. Rund um Go gibt es eine freundliche Entwickler-Gemeinde, eine gute Dokumentation und eine umfassende, für die meisten Anwendungsfälle ausreichende Standard-Bibliothek.

Folgende Eigenschaften machen es besonders geeignet:

Auf vielen Plattformen installier- und ausführbar:

$ go tool dist list
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/386
darwin/amd64
darwin/arm
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm

Dieses ist die Auflistung der verfügbaren Zielplattformen, dabei erkennt man, dass fast jede übliche Kombination von Prozessortyp und Betriebssystem unterstützt wird. Info: "darwin" ist die Mac-Plattform, man erkennt Linux und diverse weitere Unix-Varianten, Windows für 32 Bit, 64 Bit und für ARM-Prozessoren. Seit kurzer Zeit gibt es, zur Ausführung im Webbrowser, sogar Webassembly, zur Zeit allerdings noch eher experimentell.

Was bedeuted das konkret? Bei codeM werden die Anwendungen auf der Linux-Plattform entwickelt und können dann ohne Aufwand für jede der oben genannten Zielplattform kompiliert werden.

Die Anwendung ist dabei völlig unabhängig von einer Laufzeitumgebung, im Gegensatz zu Sprachen wie z.B. Python, Javascript (Node), Java, C#. Bei Go gibt es also keine weiteren Abhängigkeiten und keinen Installationsaufwand. Lediglich die Programmdatei "draufkopieren" und ausführen, fertig.

Die Ausführungsgeschwindigkeit von Go-Programmen ist hoch, nicht so schnell wie bei C++ oder Rust-Programmen, auf jeden Fall schnell genug, vergleichbar mit in Java entwickelten Applikationen.

Go-Applikationen laufen sehr robust und verbrauchen im Vergleich zu, z.B. Java, wenig RAM, also ideal für schlanke Server, Microservices, Container oder Cloud-Funktionen.

Bereits die bisher genannten Eigenschaften sind richtig cool. Es muss aber noch unbedingt genannt werden, dass, wenn gewünscht und vorhanden, automatisch alle Prozessorkerne genutzt werden. Die Sprache bringt dazu einfache Konstrukte mit, die die Entwicklung und sichere Ausführung von parallelen Programmteilen sehr erleichtern (u.a. Go-Routinen und Channel).

Zu den genannten Vorteilen gibt es natürlich auch Nachteile, z.B. sind die Programmdateien eher groß - es ist ja alles was gebraucht wird mit reinkompiliert. Bei der Sprache Go steht Einfachheit im Vordergrund - sehen wir eigentlich als Vorteil - aber gelegentlich vermisst man höhere Konzepte, wie z.B "Generics" (Generics sind in Arbeit und kommen mit Go 2.0).

Nicht zu unterschätzen ist ein weiteres Plus - das Kompatibilitätsversprechen: In Go 1.* entwickelte Software wird ohne Anpassung von jeder zukünfigen 1.* Go-Version kompilierbar sein.

Fazit: Go macht Spaß! Man kann alles damit machen und es läuft flott und überall. Ein bisschen langweilig? Vielleicht und das ist gut so.