Programmieren mit Go

© © Dimitar Dimitrov, 123RF

Moderner Klassiker

Die Programmiersprache Go verspricht mit der vor Kurzem erschienenen Version 1 langfristige Kompatibilität. Konzipiert zur Systemprogrammierung, verzichtet sie auf modische Features und ist somit auch interessant für alle, die an akuter Hype-Allergie leiden.

Go macht keine falschen Versprechungen. Vielleicht ist es gerade das, was die Sprache längerfristig interessant macht. Im Jahr 2007 haben Robert Griesemer, Ken Thompson und Rob Pike sie erfunden, weil sie mit den existierenden Sprachen zur Systemprogrammierung unzufrieden waren. Dabei bedienen sie keinen der aktuellen Trends um asynchrone Webprogrammierung oder Cloud Computing. Vielmehr haben sie aus 30 Jahren Erfahrung mit C gelernt und eine Programmiersprache geschaffen, die deren Nachfolge antreten könnte.

Wie C zeigt auch Go [1] seine Stärken bei der Systemprogrammierung, wenngleich sich die Sprache natürlich für nahezu alle Zwecke einsetzen lässt. Die Spracherfinder sind bei Google angestellt, deshalb hat Go neben Java und Python auch seinen Weg auf die Google App Engine gefunden, die Go derzeit im experimentellen Stadium unterstützt [2].

Zukunftsträchtig

Anfang 2008 hatte Ken Thompson einen ersten experimentellen Compiler fertiggestellt, der C-Code erzeugt. Ian Tyler begann etwas später mit der Arbeit an einem Go-Frontend für den GCC-Compiler. Gegen Ende des Jahres stieg Russ Cox in das Go-Projekt ein, und die Arbeit ging etwas schneller voran. Im November 2009 präsentierte das Team dann endlich das erste öffentliche Release des Go-Compilers. Im März 2012 erschien Version 1.0 von Compiler und Spezifikation, die Kompatibilität für die kommenden Go-Releases verspricht [3]. Damit eignet sich Go jetzt auch für richtige Software-Projekte, nicht nur für Experimente.

Die ausgesprochenen Ziele des Go-Projekts sind effiziente Übersetzung, schnelle Ausführung und einfache Programmierung. Bei existierenden Sprachen seien alle drei Zeile zusammen nicht zu haben, meinen die Go-Erfinder. Go soll das simple Programmieren in den immer beliebteren Sprachen wie Python und Ruby mit der Effizienz und Zuverlässigkeit von Sprachen wie C, C++ und Java kombinieren. Dabei soll die Übersetzung aber nicht so lange dauern wie etwa bei Java-Projekten. Außerdem will Go besser mit Abhängigkeiten zwischen externen Bibliotheken umgehen.

Einfachheit ist eines der hervorstechenden Merkmale von Go. Ihr zuliebe haben die Spracherfinder auf viele Konstrukte verzichtet. In erster Linie soll Go eine konsistente und unzweideutige Syntax besitzen. Das kann man von Sprachen wie etwa Perl, Ruby oder Scala nicht behaupten, die für ein und denselben Zweck eine Vielzahl syntaktischer Konstrukte oder Methoden besitzen.

Go orientiert sich an C, lässt aber viele Sprachelemente weg, beispielsweise solche, die redundant den gleichen Zweck erfüllen. Zum Beispiel gibt es vom Inkrement-Operator »++« nur noch die Postfix-Variante, die hinter der Variable steht. Gleichzeitig ist dies nur eine Anweisung, aber kein Ausdruck, der gleich weiterverwendet werden kann. Das führt zwar zu etwas mehr Schreibarbeit, aber zu eindeutiger Semantik und weniger Verwirrung.

Etwas klarer werden Go-Programme noch durch Anleihen bei strukturierten Sprachen wie Pascal, Modula und Oberon. Teilweise war die Go-Syntax schon in Newsqueak und Limbo verwirklicht. Letztere ist die Programmiersprache des Inferno-Betriebssystems, das wiederum ein Ableger des Plan9-Systems ist, an dem Thompson und Pike früher arbeiteten.

Klar formatiert

Beispielsweise verzichtet Go auf Strichpunkte, die einzelne Statements abschließen (Abbildung 1). Tatsächlich sind die Strichpunkte Teil der Sprachspezifikation, aber der Parser ergänzt sie selbstständig, ähnlich wie es auch die Javascript-Spezifikation vorsieht. Damit das klappt, muss sich der Programmierer an den vorgegebenen Stil der Klammersetzung halten, der vorsieht, dass öffnende Klammern von Blocks immer am Ende einer Zeile erscheinen, nicht alleine zu Beginn der folgenden Zeile. Das mitgelieferte Tool »gofmt« stellt diese Formatierung sicher, was den Programmierer von Handarbeit befreit und dafür sorgt, dass Go-Code bei allen Projekten gleich aussieht.

Abbildung 1: Die Tour auf der Go-Homepage verschafft einen guten ersten Eindruck der Programmiersprache.

Variablen werden mit dem Schlüsselwort »var« deklariert, gefolgt vom Variablennamen und dem Typ, also umgekehrt wie bei C, C++ oder Java:

var x float64

Variablennamen können mit jedem Zeichen beginnen, das im Unicode-Standard als Buchstabe gilt, jedoch sollte man es hierbei vernünftigerweise nicht übertreiben. Mit dem Operator »:=« lassen sich Variablen in einem Aufwasch definieren und initialisieren. Das Schlüsselwort »var« kann man hierbei, ebenso wie meist die Typangabe weglassen:

i := 1
pi := 3.142

Auch bei Schleifen haben die Go-Entwickler radikal ausgemistet, was bei näherer Betrachtung durchaus sinnvoll erscheint, denn all die Whiles, Dos und Foreachs lassen sich meist einfach umformulieren. In Go gibt es nur noch die gute alte For-Schleife.

comments powered by Disqus