• 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. Protagen Protein Services GmbH, Heilbronn, Dortmund
  2. Hottgenroth Software GmbH & Co. KG, Münster

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
       


Core i7-1185G7 (Tiger Lake) im Test: Gut gebrüllt, Intel
Core i7-1185G7 (Tiger Lake) im Test
Gut gebrüllt, Intel

Dank vier äußerst schneller CPU-Kerne und überraschend flotter iGPU gibt Tiger Lake verglichen zu AMDs Ryzen 4000 eine gute Figur ab.
Ein Test von Marc Sauter

  1. Tiger Lake Überblick zu Intels 11th-Gen-Laptops
  2. Project Athena 2.0 Evo-Ultrabooks gibt es nur mit Windows 10
  3. Ultrabook-Chip Das kann Intels Tiger Lake

Zwischenzertifikate: Zertifikatswechsel bei Let's Encrypt steht an
Zwischenzertifikate
Zertifikatswechsel bei Let's Encrypt steht an

Bisher war das Let's-Encrypt-Zwischenzertifikat von Identrust signiert. Das wird sich bald ändern.
Von Hanno Böck

  1. CAA-Fehler Let's-Encrypt-Zertifikate werden nicht sofort zurückgezogen
  2. TLS Let's Encrypt muss drei Millionen Zertifikate zurückziehen
  3. Zertifizierung Let's Encrypt validiert Domains mehrfach

Burnout im IT-Job: Mit den Haien schwimmen
Burnout im IT-Job
Mit den Haien schwimmen

Unter Druck bricht ein Webentwickler zusammen - zerrieben von zu eng getakteten Projekten. Obwohl die IT-Branche psychische Belastungen als Problem erkannt hat, lässt sie Beschäftigte oft allein.
Eine Reportage von Miriam Binner


      •  /