Dass der Name „Google“ mitt­ler­wei­le für weitaus mehr als nur eine Such­ma­schi­ne steht, dürfte hin­läng­lich bekannt sein. Die Pro­dukt­pa­let­te umfasst nützliche Web­ser­vices wie Google Maps, En­ter­tain­ment-Platt­for­men wie YouTube und Google Music, Kom­mu­ni­ka­ti­ons­an­wen­dun­gen wie Gmail, Office-Lösungen wie Google Docs und sogar Hardware, etwa das haus­ei­ge­ne Smart­phone Pixel. Ferner liefert der Groß­kon­zern seit Jahren Web- und Soft­ware­ent­wick­lern wertvolle Tools. Seit März 2012 zählt bei­spiels­wei­se die immer beliebter werdende Pro­gram­mier­spra­che Go, die weithin auch unter der Be­zeich­nung Golang bekannt ist, zum Portfolio des In­ter­net­dienst­leis­ters.

Was ist Golang?

Im September 2007 for­mu­lier­ten die für Google tätigen Ent­wick­ler Robert Griesemer, Rob Pike und Ken Thompson ihre Ziele für eine op­ti­mier­te, ver­ein­fach­te Pro­gram­mier­spra­che – und legten damit den Grund­stein für Go bzw. Golang. Was zunächst als kleineres Projekt begann, ent­wi­ckel­te sich schnell zu einem am­bi­tio­nier­ten Vorhaben, dessen Ent­wick­lung Google bewusst vor­an­trieb, indem das Un­ter­neh­men ent­spre­chen­de Res­sour­cen zur Verfügung stellte. Nachdem Go Ende 2011 offiziell als Open-Source-Projekt (BSD-Lizenz) vor­ge­stellt worden war, fand es schnell eine große Zahl an Anhängern in der Community, die bis heute an der Wei­ter­ent­wick­lung und Op­ti­mie­rung der Pro­gram­mier­spra­che 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­öf­fent­licht Google etwa halb­jähr­lich Updates.

Fakt

Das Mas­kott­chen und Logo von Golang – eine Ta­schen­rat­te (engl. Gopher) – wurde von Renée French designt, deren kreativer Feder unter anderem auch Glenda, der Plan-9-Hase, ent­sprun­gen ist. An dem in den 1980er-Jahren ent­wi­ckel­ten Unix-Be­triebs­sys­tem von Bell Labs waren Rob Pike und Ken Thompson ebenfalls maß­geb­lich beteiligt.

Die Syntax von Golang ist stark an der Basis-Syntax der C-Familie ori­en­tiert, zeigt aber deutliche Einflüsse von den durch Niklaus Wirth ent­wi­ckel­ten Sprachen Pascal, Modula und Oberon. Zudem sind Aspekte von Sprachen wie Newsqueak und Limbo ein­ge­flos­sen, welche ih­rer­seits wiederum von Tony Hoares Prozess-Algebra CSP (Com­mu­ni­ca­ting Sequential Processes) in­spi­riert sind. Golang ist kom­pi­lier­bar, wobei der Fokus von Beginn an auf eine hohe Über­set­zungs­ge­schwin­dig­keit gelegt worden ist. Zudem verfügt die Pro­gram­mier­spra­che über eine au­to­ma­ti­sche Spei­cher­be­rei­ni­gung (engl. Garbage Coll­ec­tion oder kurz GC), die im Hin­ter­grund für eine optimale Ver­wal­tung der ver­füg­ba­ren Spei­cher­res­sour­cen sorgt und auf diese Weise Spei­cher­pro­ble­me ver­hin­dert.

Wie lässt sich Golang als Pro­gram­mier­spra­che einordnen?

Obwohl Golang im Vergleich zu anderen Pro­gram­mier­spra­chen noch relativ jung ist, ist sie bereits so aus­ge­reift und stabil, dass sie von Ent­wick­lern weltweit ein­ge­setzt wird – auch Google selbst greift auf die Mög­lich­kei­ten der Pro­gram­mier­spra­che zurück. Golang zeichnet sich ins­be­son­de­re durch Sim­pli­zi­tät und Mul­ti­funk­tio­na­li­tät aus, auf die es die Ent­wick­ler von Beginn an abgesehen hatten. Der Haupt­be­weg­grund für die Ent­wick­lung einer neuen Pro­gram­mier­spra­che lag nämlich vor allem in der Un­zu­frie­den­heit mit eta­blier­ten Ver­tre­tern, die sich entweder durch ef­fi­zi­en­te Code-Kom­pi­lie­rung, schnelle Code-Aus­füh­rung oder einen einfachen Pro­gram­mie­rungs­pro­zess aus­zeich­nen, jedoch in keinem Fall alle drei Vorzüge zugleich aufweisen.

Durch die Kom­bi­na­ti­on wichtiger Features aus un­ter­schied­li­chen Sprach­fa­mi­li­en geht Golang in dieser Hinsicht tat­säch­lich mit gutem Vorbild voran: So vereint die Google-Sprache die Leich­tig­keit der Pro­gram­mie­rung, welche in­ter­pre­tier­te, dy­na­mi­sche Sprache aus­zeich­net, mit der Effizienz und Si­cher­heit einer statisch ty­pi­sier­ten, kom­pi­lier­ten Sprache. Zudem zielt die Struktur von Go darauf ab, einen kurzen Ent­wick­lungs­pro­zess zu er­mög­li­chen, der es erlaubt, auch große, aus­führ­ba­re Dateien binnen weniger Sekunden auf einem einzelnen Computer zu erstellen. Einige der ent­schei­den­den Golang-Aus­zeich­nungs­merk­ma­le, durch die dieser Qua­li­täts­stan­dard erzielt werden kann, sind:

  • ein aus­drucks­star­kes, aber leicht­ge­wich­ti­ges Typsystem zur optimalen Ein­ord­nung und Dif­fe­ren­zie­rung der ver­schie­de­nen Objekte (Variablen, Funk­tio­nen etc.)
  • Ne­ben­läu­fig­keit (parallele Pro­gram­mie­rung) für eine schnel­le­re Pro­gramm­aus­füh­rung
  • die bereits erwähnte au­to­ma­ti­sche Spei­cher­be­rei­ni­gung (GC) für eine optimale Nutzung des ver­füg­ba­ren Speichers und zur Ver­mei­dung von Spei­cher­pro­ble­men
  • eine strikte Spe­zi­fi­ka­ti­on von Ab­hän­gig­kei­ten ohne auf­wen­di­ge De­kla­ra­ti­ons­syn­tax
  • Platt­form­un­ab­hän­gig­keit, die eine Nutzung ent­wi­ckel­ter An­wen­dun­gen auf allen gängigen Systemen er­mög­licht

Mit Golang pro­gram­mie­ren – die Be­son­der­hei­ten im Überblick

Die Go-Syntax ist an die klas­si­sche Syntax von C angelehnt, un­ter­schei­det sich jedoch von der bereits 1972 ent­wi­ckel­ten Pro­gram­mier­spra­che durch eine Reihe kleinerer Ver­bes­se­run­gen und einen deutlich re­du­zier­ten Umfang. So gibt es beim Pro­gram­mie­ren mit Golang bei­spiels­wei­se keine zwingend not­wen­di­gen runden Klammern bei Be­din­gun­gen sowie Schleifen, und das für die C-Familie typische ab­schlie­ßen­de Semikolon ist lediglich optional zu setzen. Zudem lässt sich die Gül­tig­keit von Be­zeich­nern (Namen genannter Elemente) durch die Schreib­wei­se (groß oder klein) re­gu­lie­ren. Soll ein Be­zeich­ner zum Beispiel auch außerhalb eines be­stimm­ten Go-Pakets aktiv sein, gilt es, den ersten Buch­sta­ben groß­zu­schrei­ben. Im Folgenden sind einige weitere Be­son­der­hei­ten bei der Pro­gram­mie­rung mit Golang auf­ge­lis­tet:

  • GOPATH-Umgebung als Basis: Eine der ersten Amts­hand­lun­gen bei der Pro­gram­mie­rung mit Go besteht darin, das GOPATH-Ver­zeich­nis inklusive der drei Un­ter­ver­zeich­nis­se „src“ (Go-Quell­da­tei­en), „pkg“ (Go-Paket-Objekte „package objects“) und „bin“(aus­führ­ba­re Kommandos) anzulegen. Jeglicher Go-Code, der ge­schrie­ben wird, lässt sich inklusive der ent­spre­chen­den Ab­hän­gig­kei­ten über diesen Workspace verwalten. Der Spei­cher­ort dieses ver­pflich­ten­den GOPATH-Ver­zeich­nis­ses lässt sich dabei frei wählen.
     
  • Modularer Aufbau mit GOLANG-Paketen (Packages): Quell­da­tei­en lassen sich in Golang modular über Ver­zeich­nis­se or­ga­ni­sie­ren, die als Packages bzw. Pakete be­zeich­net werden. Der Name des je­wei­li­gen Ver­zeich­nis­ses ist damit gleich­zei­tig auch der Name des Pakets, zu dem alle Quell­da­tei­en gehören, die sich in diesem Ver­zeich­nis befinden. Sollen Funk­tio­nen, Typen etc. pa­ket­über­grei­fend an­ge­wen­det werden, ist die bereits erwähnte Groß­schrei­bung des ent­spre­chen­den Be­zeich­ners an­zu­wen­den.
     
  • Ein­heit­li­che, vor­ge­schrie­be­ne Code-For­ma­tie­rung: Golang gibt bestimmte Kon­ven­tio­nen für die For­ma­tie­rung des Codes vor, bei­spiels­wei­se für den exakten Abstand zwischen den einzelnen Elementen. Wer also gelernt hat, An­wen­dun­gen mit Golang zu pro­gram­mie­ren, kann auch den Code anderer Ent­wick­ler pro­blem­los lesen, ohne zuvor deren per­sön­li­chen For­ma­tie­rungs­stil ent­zif­fern zu müssen, wie es bei vielen anderen Sprachen der Fall ist. Das Format muss dabei vom Verfasser nicht bis ins kleinste Detail ein­ge­hal­ten werden: Das in­te­grier­te Tool gofmt optimiert ge­schrie­be­nen Golang-Code au­to­ma­tisch, indem es feh­ler­haf­te For­ma­tie­run­gen behebt.
     
  • Relative Importe als Standard: Alle Dateien und Pakete, die man in Golang-Projekte im­por­tiert (ob aus eigener oder aus fremder Hand), sind immer relativ zum Ver­zeich­nis GOPATH/src, was den Im­port­vor­gang sehr un­kom­pli­ziert macht. Ferner kom­pi­liert Go im­por­tier­te Elemente nicht, wenn diese nicht auch tat­säch­lich genutzt werden. Auf diese Weise ist ein sauberer Code auch dann ga­ran­tiert, wenn im­por­tier­te Kom­po­nen­ten nicht bzw. nicht mehr zum Einsatz kommen.
     
  • Multiple Rück­ga­be­wer­te für Funk­tio­nen und Methoden: Mit Go lassen sich Funk­tio­nen und Methoden erzeugen, die mehrere Werte zu­rück­ge­ben können. Damit kann Go bei­spiels­wei­se ein gültiges Ergebnis und einen al­ter­na­tiv an­ge­ge­be­nen Fehler bei der Rückgabe sauber von­ein­an­der trennen. In C bei­spiels­wei­se werden hingegen Schreib­feh­ler durch einen negativen Zäh­ler­wert aus­ge­drückt, während der ei­gent­li­che Feh­ler­code gesondert auf­be­wahrt wird.

Stärken und An­wen­dungs­be­rei­che von Golang

Viele ele­men­ta­re Stärken von Golang sind in diesem Artikel bereits zur Sprache gekommen: Wegen ihrer Sim­pli­zi­tät bietet die Google-Sprache Ent­wick­lern im Vergleich zu vielen anderen Pro­gram­mier­spra­chen ein hohes Maß an Ent­las­tung. Wer die Grund­la­gen ver­in­ner­licht hat, der pro­fi­tiert von der einfachen Bedienung und zahl­rei­chen Au­to­ma­tis­men, die eine er­heb­li­che Zeit­er­spar­nis bedeuten. Go liefert durch diese Hilfs­mit­tel, zum Beispiel das ei­gen­stän­dig agierende gofmt zur au­to­ma­ti­schen Code-Op­ti­mie­rung, auch die perfekte Antwort auf die immer komplexer werdenden Auf­ga­be­stel­lun­gen, die es in der Soft­ware­ent­wick­lung zu be­wäl­ti­gen gilt. Hinzu kommt die Tatsache, dass Golang-Code immer gleich for­ma­tiert ist, was die all­ge­mei­ne Les­bar­keit und damit vor allem auch die Zu­sam­men­ar­beit im Team erheblich ver­ein­facht.

Eine weitere Stärke, die beim Golang-Pro­gram­mie­ren zum Tragen kommt, ist die gute Per­for­mance der Pro­gram­mier­spra­che. Die Aus­füh­rungs­ge­schwin­dig­keit von Go-An­wen­dun­gen überzeugt im all­ge­mei­nen Vergleich mit anderen Compiler-Sprachen. So ent­spricht die Kom­pi­lie­rungs­ge­schwin­dig­keit bei­spiels­wei­se grob jener von Java. Während viele Java-An­wen­dun­gen jedoch auf dem Spring-Framework aufbauen und dadurch beim Start­pro­zess eine gewisse Zeit benötigen, bis bei­spiels­wei­se HTTP-Anfragen be­ant­wor­tet werden können, nutzen Golang-Dienste die vor­han­de­nen Im­ple­men­tie­run­gen der Stan­dard­bi­blio­thek, was den Start­vor­gang erheblich be­schleu­nigt.

Folglich ist es wenig über­ra­schend, dass Golang bis dato vor allem im Un­ter­neh­mens- und Ser­ver­um­feld zum Einsatz kommt, wo die Sta­bi­li­tät und Per­for­mance von Diensten eine wichtige Rolle spielen. Ins­be­son­de­re bei der con­tai­ner­ba­sier­ten Vir­tua­li­sie­rung ist die junge Pro­gram­mier­spra­che gefragt, was nicht zuletzt auch darauf zu­rück­zu­füh­ren ist, dass Docker als wohl pro­mi­nen­tes­ter Vertreter unter den Container-Platt­for­men auf Go basiert.

Wo haben andere Pro­gram­mier­spra­chen die Nase vorn?

Bei allem Lob für die moderne Pro­gram­mier­spra­che von Google soll natürlich nicht un­be­rück­sich­tigt bleiben, dass durchaus auch ein paar kleinere Schwach­punk­te exis­tie­ren. Diese sind in erster Linie auf die Sim­pli­zi­tät von Golang zu­rück­zu­füh­ren, 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 Ent­wick­ler gerade an anderen Pro­gram­mier­spra­chen schätzen.

Allen voran ist si­cher­lich das Fehlen ge­ne­ri­scher Typen (also Da­ten­ty­pen mit der Mög­lich­keit zur Angabe in­di­vi­du­el­ler Typ-Parameter) in der Stan­dard­bi­blio­thek zu nennen. Wer also Ver­fech­ter der typ­si­che­ren Pro­gram­mie­rung und bei­spiels­wei­se die Nutzung von Generics in Java gewohnt ist, muss auf ein ähnliches Feature in Go bis zum ge­gen­wär­ti­gen Zeitpunkt ver­zich­ten (das Go-Team schließt die Im­ple­men­tie­rung ge­ne­ri­scher Typen in einer künftigen Sprach­ver­si­on jedoch nicht aus). Auch der Verzicht auf Klassen, Vererbung und Kon­struk­to­ren ist für viele Ent­wick­ler zumindest ge­wöh­nungs­be­dürf­tig. Ein weiteres Go-Feature, das nicht immer erwünscht ist, stellt die au­to­ma­ti­sche Aus­blen­dung nicht aktiver Im­port­da­tei­en dar. Andere Sprachen punkten hier durch die Mög­lich­keit, ent­spre­chen­de Kom­po­nen­ten „aus­zu­kom­men­tie­ren“, sodass sie dem Pro­gramm­code – trotz In­ak­ti­vi­tät – erhalten bleiben.

Ein weiterer Nachteil Golangs gegenüber Ur­ge­stei­nen wie C, C++ und Co. liegt in der noch sehr jungen Ge­schich­te der Sprache begründet. So verfügt sie über ein we­sent­lich kleineres Arsenal an stan­dard­mä­ßig im­ple­men­tier­ten und im­port­fer­ti­gen Packages. Zudem gibt es für Go im Netz auch we­sent­lich weniger Manuals, Tutorials etc. als für eta­blier­te Pro­gram­mier­spra­chen.

Vor- und Nachteile von Golang im ta­bel­la­ri­schen Überblick

Die Vorzüge von Golang Die Schwächen von Golang
platt­form­über­grei­fend keine ge­ne­ri­schen Typen
stark ver­ein­fach­te Syntax nur teilweise ob­jekt­ori­en­tiert
au­to­ma­ti­sches Spei­cher­ma­nage­ment (Garbage Coll­ec­tion) aus­bau­fä­hi­ge Un­ter­stüt­zung von IDEs (In­te­gra­ted De­ve­lo­p­ment En­vi­ron­ments)
ein­heit­li­che Code-For­ma­tie­rung ver­gleichs­wei­se spär­li­ches Angebot an Dritt-Bi­blio­the­ken und Dritt-Packages
einfacher Im­port­pro­zess mühsamer Umstieg von klas­si­schen, ob­jekt­ori­en­tier­ten Sprachen wie Java und C++
mehrere Rück­ga­be­wer­te für Funk­tio­nen und Methoden möglich (erst) wenige Tutorials, Experten etc.
au­to­ma­ti­sier­te Code-Korrektur (gofmt)
Ne­ben­läu­fig­keit
um­fang­rei­che Stan­dard­bi­blio­thek (ins­be­son­de­re für HTTP und Netz­werk­auf­ga­ben)

Fazit: Für wen lohnt es sich, Golang zu erlernen?

Nachdem dieser Artikel die Grund­la­gen und Be­son­der­hei­ten der Open-Source-Pro­gram­mier­spra­che be­leuch­tet hat, drängt sich zum Abschluss vor allem eine Frage auf: Wer sollte sich denn nun ei­gent­lich die Mühe machen, das Pro­gram­mie­ren mit Golang zu erlernen? Wie so häufig lässt sich hierauf natürlich keine all­ge­mein­gül­ti­ge Antwort geben, denn auch Go ist nicht als Ersatz für alle bis dato genutzten Pro­gram­mier­spra­chen, sondern als eine mögliche Al­ter­na­ti­ve ent­wi­ckelt worden. Dank ihrer Effizienz und der her­vor­ra­gen­den Per­for­mance, die sich auch in den pro­gram­mier­ten An­wen­dun­gen wi­der­spie­geln, ist sie vor allem im Business- und Ser­ver­be­reich eine in­ter­es­san­te Wahl. Je mehr Code ge­schrie­ben und kom­pi­liert werden muss, desto stärker kommen diese Vorteile auch zum Tragen.

Für Pro­gram­mier­neu­lin­ge ist der Lern­pro­zess dabei häufig einfacher: Sie pro­fi­tie­ren von der Sim­pli­zi­tät der modernen Sprache, die erfahrene Ent­wick­ler aufgrund der Ähn­lich­kei­ten zu C, Java und Co. durchaus auch frus­trie­ren kann. Sind die Um­stel­lungs­schwie­rig­kei­ten jedoch erst einmal über­wun­den, werden auch alt­ein­ge­ses­se­ne 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-Pro­gram­mier­spra­che in jedem Fall eine große Chance – sei es bei der Bewerbung um einen Ent­wick­ler­pos­ten oder bei der Rea­li­sie­rung eines neuen Projekts.

Zum Hauptmenü