Golang: Die einfache Programmiersprache aus dem Hause Google
Dass der Name „Google“ mittlerweile für weitaus mehr als nur eine Suchmaschine steht, dürfte hinlänglich bekannt sein. Die Produktpalette umfasst nützliche Webservices wie Google Maps, Entertainment-Plattformen wie YouTube und Google Music, Kommunikationsanwendungen wie Gmail, Office-Lösungen wie Google Docs und sogar Hardware, etwa das hauseigene Smartphone Pixel. Ferner liefert der Großkonzern seit Jahren Web- und Softwareentwicklern wertvolle Tools. Seit März 2012 zählt beispielsweise die immer beliebter werdende Programmiersprache Go, die weithin auch unter der Bezeichnung Golang bekannt ist, zum Portfolio des Internetdienstleisters.
Was ist Golang?
Im September 2007 formulierten die für Google tätigen Entwickler Robert Griesemer, Rob Pike und Ken Thompson ihre Ziele für eine optimierte, vereinfachte Programmiersprache – und legten damit den Grundstein für Go bzw. Golang. Was zunächst als kleineres Projekt begann, entwickelte sich schnell zu einem ambitionierten Vorhaben, dessen Entwicklung Google bewusst vorantrieb, indem das Unternehmen entsprechende Ressourcen zur Verfügung stellte. Nachdem Go Ende 2011 offiziell als Open-Source-Projekt (BSD-Lizenz) vorgestellt worden war, fand es schnell eine große Zahl an Anhängern in der Community, die bis heute an der Weiterentwicklung und Optimierung der Programmiersprache mitwirkt. Der finale Release der ersten stabilen Version (1.0) erfolgte am 28. März 2012. Seit Version 1.1, die ein Jahr später folgte, veröffentlicht Google etwa halbjährlich Updates.
Das Maskottchen und Logo von Golang – eine Taschenratte (engl. Gopher) – wurde von Renée French designt, deren kreativer Feder unter anderem auch Glenda, der Plan-9-Hase, entsprungen ist. An dem in den 1980er-Jahren entwickelten Unix-Betriebssystem von Bell Labs waren Rob Pike und Ken Thompson ebenfalls maßgeblich beteiligt.
Die Syntax von Golang ist stark an der Basis-Syntax der C-Familie orientiert, zeigt aber deutliche Einflüsse von den durch Niklaus Wirth entwickelten Sprachen Pascal, Modula und Oberon. Zudem sind Aspekte von Sprachen wie Newsqueak und Limbo eingeflossen, welche ihrerseits wiederum von Tony Hoares Prozess-Algebra CSP (Communicating Sequential Processes) inspiriert sind. Golang ist kompilierbar, wobei der Fokus von Beginn an auf eine hohe Übersetzungsgeschwindigkeit gelegt worden ist. Zudem verfügt die Programmiersprache über eine automatische Speicherbereinigung (engl. Garbage Collection oder kurz GC), die im Hintergrund für eine optimale Verwaltung der verfügbaren Speicherressourcen sorgt und auf diese Weise Speicherprobleme verhindert.
Wie lässt sich Golang als Programmiersprache einordnen?
Obwohl Golang im Vergleich zu anderen Programmiersprachen noch relativ jung ist, ist sie bereits so ausgereift und stabil, dass sie von Entwicklern weltweit eingesetzt wird – auch Google selbst greift auf die Möglichkeiten der Programmiersprache zurück. Golang zeichnet sich insbesondere durch Simplizität und Multifunktionalität aus, auf die es die Entwickler von Beginn an abgesehen hatten. Der Hauptbeweggrund für die Entwicklung einer neuen Programmiersprache lag nämlich vor allem in der Unzufriedenheit mit etablierten Vertretern, die sich entweder durch effiziente Code-Kompilierung, schnelle Code-Ausführung oder einen einfachen Programmierungsprozess auszeichnen, jedoch in keinem Fall alle drei Vorzüge zugleich aufweisen.
Durch die Kombination wichtiger Features aus unterschiedlichen Sprachfamilien geht Golang in dieser Hinsicht tatsächlich mit gutem Vorbild voran: So vereint die Google-Sprache die Leichtigkeit der Programmierung, welche interpretierte, dynamische Sprache auszeichnet, mit der Effizienz und Sicherheit einer statisch typisierten, kompilierten Sprache. Zudem zielt die Struktur von Go darauf ab, einen kurzen Entwicklungsprozess zu ermöglichen, der es erlaubt, auch große, ausführbare Dateien binnen weniger Sekunden auf einem einzelnen Computer zu erstellen. Einige der entscheidenden Golang-Auszeichnungsmerkmale, durch die dieser Qualitätsstandard erzielt werden kann, sind:
- ein ausdrucksstarkes, aber leichtgewichtiges Typsystem zur optimalen Einordnung und Differenzierung der verschiedenen Objekte (Variablen, Funktionen etc.)
- Nebenläufigkeit (parallele Programmierung) für eine schnellere Programmausführung
- die bereits erwähnte automatische Speicherbereinigung (GC) für eine optimale Nutzung des verfügbaren Speichers und zur Vermeidung von Speicherproblemen
- eine strikte Spezifikation von Abhängigkeiten ohne aufwendige Deklarationssyntax
- Plattformunabhängigkeit, die eine Nutzung entwickelter Anwendungen auf allen gängigen Systemen ermöglicht
Mit Golang programmieren – die Besonderheiten im Überblick
Die Go-Syntax ist an die klassische Syntax von C angelehnt, unterscheidet sich jedoch von der bereits 1972 entwickelten Programmiersprache durch eine Reihe kleinerer Verbesserungen und einen deutlich reduzierten Umfang. So gibt es beim Programmieren mit Golang beispielsweise keine zwingend notwendigen runden Klammern bei Bedingungen sowie Schleifen, und das für die C-Familie typische abschließende Semikolon ist lediglich optional zu setzen. Zudem lässt sich die Gültigkeit von Bezeichnern (Namen genannter Elemente) durch die Schreibweise (groß oder klein) regulieren. Soll ein Bezeichner zum Beispiel auch außerhalb eines bestimmten Go-Pakets aktiv sein, gilt es, den ersten Buchstaben großzuschreiben. Im Folgenden sind einige weitere Besonderheiten bei der Programmierung mit Golang aufgelistet:
- GOPATH-Umgebung als Basis: Eine der ersten Amtshandlungen bei der Programmierung mit Go besteht darin, das GOPATH-Verzeichnis inklusive der drei Unterverzeichnisse „src“ (Go-Quelldateien), „pkg“ (Go-Paket-Objekte „package objects“) und „bin“(ausführbare Kommandos) anzulegen. Jeglicher Go-Code, der geschrieben wird, lässt sich inklusive der entsprechenden Abhängigkeiten über diesen Workspace verwalten. Der Speicherort dieses verpflichtenden GOPATH-Verzeichnisses lässt sich dabei frei wählen.
- Modularer Aufbau mit GOLANG-Paketen (Packages): Quelldateien lassen sich in Golang modular über Verzeichnisse organisieren, die als Packages bzw. Pakete bezeichnet werden. Der Name des jeweiligen Verzeichnisses ist damit gleichzeitig auch der Name des Pakets, zu dem alle Quelldateien gehören, die sich in diesem Verzeichnis befinden. Sollen Funktionen, Typen etc. paketübergreifend angewendet werden, ist die bereits erwähnte Großschreibung des entsprechenden Bezeichners anzuwenden.
- Einheitliche, vorgeschriebene Code-Formatierung: Golang gibt bestimmte Konventionen für die Formatierung des Codes vor, beispielsweise für den exakten Abstand zwischen den einzelnen Elementen. Wer also gelernt hat, Anwendungen mit Golang zu programmieren, kann auch den Code anderer Entwickler problemlos lesen, ohne zuvor deren persönlichen Formatierungsstil entziffern zu müssen, wie es bei vielen anderen Sprachen der Fall ist. Das Format muss dabei vom Verfasser nicht bis ins kleinste Detail eingehalten werden: Das integrierte Tool gofmt optimiert geschriebenen Golang-Code automatisch, indem es fehlerhafte Formatierungen behebt.
- Relative Importe als Standard: Alle Dateien und Pakete, die man in Golang-Projekte importiert (ob aus eigener oder aus fremder Hand), sind immer relativ zum Verzeichnis GOPATH/src, was den Importvorgang sehr unkompliziert macht. Ferner kompiliert Go importierte Elemente nicht, wenn diese nicht auch tatsächlich genutzt werden. Auf diese Weise ist ein sauberer Code auch dann garantiert, wenn importierte Komponenten nicht bzw. nicht mehr zum Einsatz kommen.
- Multiple Rückgabewerte für Funktionen und Methoden: Mit Go lassen sich Funktionen und Methoden erzeugen, die mehrere Werte zurückgeben können. Damit kann Go beispielsweise ein gültiges Ergebnis und einen alternativ angegebenen Fehler bei der Rückgabe sauber voneinander trennen. In C beispielsweise werden hingegen Schreibfehler durch einen negativen Zählerwert ausgedrückt, während der eigentliche Fehlercode gesondert aufbewahrt wird.
Stärken und Anwendungsbereiche von Golang
Viele elementare Stärken von Golang sind in diesem Artikel bereits zur Sprache gekommen: Wegen ihrer Simplizität bietet die Google-Sprache Entwicklern im Vergleich zu vielen anderen Programmiersprachen ein hohes Maß an Entlastung. Wer die Grundlagen verinnerlicht hat, der profitiert von der einfachen Bedienung und zahlreichen Automatismen, die eine erhebliche Zeitersparnis bedeuten. Go liefert durch diese Hilfsmittel, zum Beispiel das eigenständig agierende gofmt zur automatischen Code-Optimierung, auch die perfekte Antwort auf die immer komplexer werdenden Aufgabestellungen, die es in der Softwareentwicklung zu bewältigen gilt. Hinzu kommt die Tatsache, dass Golang-Code immer gleich formatiert ist, was die allgemeine Lesbarkeit und damit vor allem auch die Zusammenarbeit im Team erheblich vereinfacht.
Eine weitere Stärke, die beim Golang-Programmieren zum Tragen kommt, ist die gute Performance der Programmiersprache. Die Ausführungsgeschwindigkeit von Go-Anwendungen überzeugt im allgemeinen Vergleich mit anderen Compiler-Sprachen. So entspricht die Kompilierungsgeschwindigkeit beispielsweise grob jener von Java. Während viele Java-Anwendungen jedoch auf dem Spring-Framework aufbauen und dadurch beim Startprozess eine gewisse Zeit benötigen, bis beispielsweise HTTP-Anfragen beantwortet werden können, nutzen Golang-Dienste die vorhandenen Implementierungen der Standardbibliothek, was den Startvorgang erheblich beschleunigt.
Folglich ist es wenig überraschend, dass Golang bis dato vor allem im Unternehmens- und Serverumfeld zum Einsatz kommt, wo die Stabilität und Performance von Diensten eine wichtige Rolle spielen. Insbesondere bei der containerbasierten Virtualisierung ist die junge Programmiersprache gefragt, was nicht zuletzt auch darauf zurückzuführen ist, dass Docker als wohl prominentester Vertreter unter den Container-Plattformen auf Go basiert.
Wo haben andere Programmiersprachen die Nase vorn?
Bei allem Lob für die moderne Programmiersprache von Google soll natürlich nicht unberücksichtigt bleiben, dass durchaus auch ein paar kleinere Schwachpunkte existieren. Diese sind in erster Linie auf die Simplizität von Golang zurückzuführen, die zwar auf der einen Seite die größte Stärke darstellt, auf der anderen Seite aber auch dafür sorgt, dass der Sprache bestimmte Facetten fehlen, die manche Entwickler gerade an anderen Programmiersprachen schätzen.
Allen voran ist sicherlich das Fehlen generischer Typen (also Datentypen mit der Möglichkeit zur Angabe individueller Typ-Parameter) in der Standardbibliothek zu nennen. Wer also Verfechter der typsicheren Programmierung und beispielsweise die Nutzung von Generics in Java gewohnt ist, muss auf ein ähnliches Feature in Go bis zum gegenwärtigen Zeitpunkt verzichten (das Go-Team schließt die Implementierung generischer Typen in einer künftigen Sprachversion jedoch nicht aus). Auch der Verzicht auf Klassen, Vererbung und Konstruktoren ist für viele Entwickler zumindest gewöhnungsbedürftig. Ein weiteres Go-Feature, das nicht immer erwünscht ist, stellt die automatische Ausblendung nicht aktiver Importdateien dar. Andere Sprachen punkten hier durch die Möglichkeit, entsprechende Komponenten „auszukommentieren“, sodass sie dem Programmcode – trotz Inaktivität – erhalten bleiben.
Ein weiterer Nachteil Golangs gegenüber Urgesteinen wie C, C++ und Co. liegt in der noch sehr jungen Geschichte der Sprache begründet. So verfügt sie über ein wesentlich kleineres Arsenal an standardmäßig implementierten und importfertigen Packages. Zudem gibt es für Go im Netz auch wesentlich weniger Manuals, Tutorials etc. als für etablierte Programmiersprachen.
Vor- und Nachteile von Golang im tabellarischen Überblick
Die Vorzüge von Golang | Die Schwächen von Golang |
---|---|
plattformübergreifend | keine generischen Typen |
stark vereinfachte Syntax | nur teilweise objektorientiert |
automatisches Speichermanagement (Garbage Collection) | ausbaufähige Unterstützung von IDEs (Integrated Development Environments) |
einheitliche Code-Formatierung | vergleichsweise spärliches Angebot an Dritt-Bibliotheken und Dritt-Packages |
einfacher Importprozess | mühsamer Umstieg von klassischen, objektorientierten Sprachen wie Java und C++ |
mehrere Rückgabewerte für Funktionen und Methoden möglich | (erst) wenige Tutorials, Experten etc. |
automatisierte Code-Korrektur (gofmt) | |
Nebenläufigkeit | |
umfangreiche Standardbibliothek (insbesondere für HTTP und Netzwerkaufgaben) |
Fazit: Für wen lohnt es sich, Golang zu erlernen?
Nachdem dieser Artikel die Grundlagen und Besonderheiten der Open-Source-Programmiersprache beleuchtet hat, drängt sich zum Abschluss vor allem eine Frage auf: Wer sollte sich denn nun eigentlich die Mühe machen, das Programmieren mit Golang zu erlernen? Wie so häufig lässt sich hierauf natürlich keine allgemeingültige Antwort geben, denn auch Go ist nicht als Ersatz für alle bis dato genutzten Programmiersprachen, sondern als eine mögliche Alternative entwickelt worden. Dank ihrer Effizienz und der hervorragenden Performance, die sich auch in den programmierten Anwendungen widerspiegeln, ist sie vor allem im Business- und Serverbereich eine interessante Wahl. Je mehr Code geschrieben und kompiliert werden muss, desto stärker kommen diese Vorteile auch zum Tragen.
Für Programmierneulinge ist der Lernprozess dabei häufig einfacher: Sie profitieren von der Simplizität der modernen Sprache, die erfahrene Entwickler aufgrund der Ähnlichkeiten zu C, Java und Co. durchaus auch frustrieren kann. Sind die Umstellungsschwierigkeiten jedoch erst einmal überwunden, werden auch alteingesessene Coder die Vorzüge von Golang zu schätzen lernen. Da der Markt an Go-Experten noch nicht sehr groß ist, bietet Know-how in der Google-Programmiersprache in jedem Fall eine große Chance – sei es bei der Bewerbung um einen Entwicklerposten oder bei der Realisierung eines neuen Projekts.