• IT-Karriere:
  • Services:

Programmiersprache Go: Schlanke Syntax, schneller Compiler

Die objektorientierte Programmiersprache Go eignet sich vor allem zum Schreiben von Netzwerk- und Cloud-Diensten.

Artikel von Tim Schürmann veröffentlicht am
Die Taschenratte, das Go-Maskottchen
Die Taschenratte, das Go-Maskottchen (Bild: Renee French / https://golang.org/doc/gopher//CC BY 3.0)

Weil ihnen die etablierten Programmiersprachen zu große Schwächen aufwiesen, starteten die drei Google-Mitarbeiter Robert Griesemer, Rob Pike und Ken Thompson 2007 die Arbeit an einer neuen Programmiersprache. C, C++ und Java waren ihnen zu komplex, liefen zu langsam oder besaßen bummelnde Compiler.

Das Ergebnis namens Go kommt mit einer deutlich schlankeren Syntax aus, unterstützt von Haus aus Nebenläufigkeit, arbeitet mit Unicode und kompiliert besonders flott seinen Quellcode zu nativen Binärprogrammen.

Den Speicher räumt im Hintergrund eine intelligente Garbage Collection auf.

Mittlerweile kommt Go in zahlreichen größeren Projekten zum Einsatz. Dazu zählen Docker, die Datenbank InfluxDB, OpenShift und Kubernetes. Alleine letztgenannte Software zählt bereits über eine Million Codezeilen.

Stellenmarkt
  1. IT-Systemhaus der Bundesagentur für Arbeit, Nürnberg
  2. Allianz Deutschland AG, München Unterföhring

Das niedliche Maskottchen ist übrigens kein Hamster, sondern eine Taschenratte (englisch: Gopher).

Kompakte Syntax

Wer schon einmal in C, C++ oder Java programmiert hat, dürfte in Go einiges wiedererkennen, mit vielem aber auch fremdeln. So muss in Go am Ende von Anweisungen kein Semikolon stehen.

Folgendes Beispiel berechnet den größten gemeinsamen Teiler:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. // Berechne ggT
  6. func ggT(a int32, b int32) int32 {
  7. if b == 0 { return a }
  8. if a == 0 { return b }
  9.  
  10. for b != 0 {
  11. temp := a % b
  12. a = b
  13. b = temp
  14. }
  15.  
  16. return a
  17. }
  18.  
  19. func main() {
  20. fmt.Println(ggT(30,50))
  21. }

Zunächst holt import das Paket fmt aus der Standardbibliothek hinzu. Es enthält unter anderem die Funktion fmt.Println(), die Texte ausgibt. Anschließend definiert das Beispiel mit dem Schlüsselwort func eine neue Funktion namens ggT, die zwei Zahlen a und b entgegennimmt und den größten gemeinsamen Teiler als Integerzahl zurückliefert. Wie in C++ und Java rahmen die geschweiften Klammern alle zur Funktion gehörenden Anweisungen ein. Funktionen lassen sich übrigens als Werte an andere Funktionen übergeben, zudem unterstützt Go Closures.

Typendeklaration

In Go muss bei der Deklaration von Variablen immer ein Typ angegeben werden - und zwar hinter dem Variablennamen. int32 aus dem Beispiel steht dabei für eine vorzeichenbehaftete 32-Bit-Ganzzahl. Es gibt auch ein int, dessen Größe jedoch von der entsprechenden Prozessorarchitektur abhängt und somit zwischen den Systemen variieren kann. In Funktionen kann Go den Datentyp über den Operator := auch selbst ermitteln. Beim größten gemeinsamen Teiler leitet Go so den Typ der Variablen temp ab.

Gibt eine Funktion wie ggT() einen Wert zurück, steht sein Typ hinter dem Funktionsnamen. Funktionen dürfen zudem mehrere Werte zurückliefern. Das machen sich viele Funktionen zunutze, um einen Fehler zu melden: Go selbst kennt keinen Mechanismus zur Fehlerbehandlung, wie dies andere Sprachen mit Exceptions oder throw/catch-Konstrukten bereitstellen. Die meisten Go-Funktionen zeigen daher in einem zusätzlichen Rückgabewert an, ob ein Fehler aufgetreten ist. Dieser Wert muss anschließend lediglich per if-Abfrage getestet werden.

Auch bei Arrays steht der Typ hinter den eckigen Klammern, was zu folgenden Konstrukten führt:

  1. ampel := [3]string{"Rot", "Gelb", "Grün"}

In ampel[2] würde anschließend der Text "Grün" liegen. Ergänzend gibt es noch Maps und Slices. Letztgenannte sind dynamische Arrays, die sich verändern, verlängern und kürzen lassen. Maps entsprechen den Dictionaries aus anderen Sprachen und funktionieren ähnlich wie ein Telefonbuch. Go kennt derzeit nur die aus C, C++ und Java bekannte for-Schleife, die im folgenden Beispiel i von 0 um eins hoch zählt, solange i kleiner als 10 ist:

  1. for i := 0; i < 10; i++ {...}

Übergibt man wie beim größten gemeinsamen Teiler nur eine Bedingung wie b > 0, läuft die Schleife, bis die Bedingung erfüllt ist. for ersetzt so die in anderen Sprachen bekannte while-Schleife. Ergänzend kennt Go noch die nützliche Variante for i, r := range ampel {...}. Diese Schleife zählt i bei jedem Durchlauf um eins hoch, r enthält das jeweils nächste Element aus dem Array ampel. Sofern man i nicht benötigt, weist man darauf mit einem Unterstrich hin:

  1. for _, r := range ampel {...}

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
Go hat Zeiger 
  1. 1
  2. 2
  3. 3
  4. 4
  5.  


Anzeige
Hardware-Angebote
  1. täglich neue Deals bei Alternate.de

pengpong 13. Aug 2020 / Themenstart

Ein bischen spät zu der Party... aber egal ;) In deinem Beispiel würde ich aber in Go...

Butterkeks 06. Aug 2020 / Themenstart

Ja, aber was ich damit ausdrücken wollte, ist, dass unsere Welt nicht besser wäre, wenn...

BlackSuit 05. Aug 2020 / Themenstart

Offensichtlich willst du den Punkt nicht verstehen. Und natürlich je mehr Maps desto...

\pub\bash0r 05. Aug 2020 / Themenstart

Nein, aber das würde auch nicht passen, da du Interfaces in Go nicht so verwendest. In...

kieleich 04. Aug 2020 / Themenstart

Sind die mittlerweile wieder kleiner geworden? Also ich bin bei Go vor ein paar Jahren...

Kommentieren


Folgen Sie uns
       


    •  /