Ein Einstieg in die Programmiersprache Go, Teil 2

Seite 2: Batterien inklusive

Inhaltsverzeichnis

Der Erfolg einer Programmiersprache ist nicht nur von ihren Features abhängig. Maßgeblich beteiligt sind auch die verfügbaren Bibliotheken. Schließlich möchten Entwickler im Programmieralltag nicht jedes Rad neu erfinden. Go verfolgt, ähnlich wie Python, den Kurs der "Batteries included". Das heißt, die Standardbibliothek bringt von Haus aus reichlich Funktionen mit und enthält unter anderem Packages für XML und JSON, HTML- und Text-Templates, über produktionsreife HTTP-Server/Client-Bibliotheken (inklusive HTTP 2.0) bis hin zur Kryptografie.

Gerade letzteres fehlt bei vielen Programmiersprachen in den Standardbibliotheken, weshalb Anwender häufig auf C-Bibliotheken wie OpenSSL oder libsodium zurückgreifen. Das wiederum verursacht Probleme beim Build und Deployment: Auf dem Build-System braucht es die passende Compiler-Infrastruktur. Bibliotheken und deren Abhängigkeiten müssen in den richtigen Versionen vorhanden sein, sowohl auf dem Build- als auch auf dem Deployment-System.

Es gibt außerdem ein reichhaltiges Ökosystem von Drittanbieter-Bibliotheken, sollte eine Funktion nicht in der Standardbibliothek vorhanden sein. Das Einbinden von C-Bibliotheken ist leicht und über das syscall-Package der Standardbibliothek können Entwickler direkt Systemaufrufe ausführen.

Laut Rob Pike, einem der Go-Väter, sind die ersten Ideen zu Go bei einem längeren Kompiliervorgang von C++ entstanden. Ziel war es, die Schmerzen mit C++ wie die langen Kompilierzeiten zu beseitigen.

Go kompiliert in der Tat schnell. Auch große Projekte lassen sich meist in wenigen Sekunden kompilieren. Dazu kommt, dass Go-Kompilate statisch gelinkte Binaries sind, die ohne weitere Abhängigkeiten lauffähig sind. Das mühsame und oft fragile Aufsetzen von Abhängigkeiten auf dem Deployment-Ziel entfällt. Ein erfreulicher Nebeneffekt ist das einfache Kompilieren für andere Betriebssysteme und Prozessorarchitekturen. Entwickler müssen nur die passenden Umgebungsvariablen setzen.

# Cross-compiling von Windows oder macOS für den Raspberry Pi:
$ GOOS=linux GOARCH=arm GOARM=6 go build -o example