© Excellent backgrounds/Shutterstock.com
Infografik

Die wichtigsten Sprachkonstrukte in Go


Gopher_Slices.png

Slices erweitern die Arrays in Go. Während ein Array nur eine feste Größe besitzt, kann ein Slice beliebig vergrößert werden. Außerdem ermöglichen Slices das Konzept des Subslicings, bei dem ein Slice als Teil eines anderen Slice definiert wird. Technisch gesehen ist ein Slice ein Tripel aus einem Pointer auf ein Array und jeweils einem Integer für Größe des Slice und Kapazität des Arrays.

Ein Slice wird mit einer Größenangabe initialisiert, dieses Slice fasst 20 Elemente:

s := make([]Typ, 20) 

Durch die zusätzliche Angabe einer Kapazität (50) wird das zugrunde liegende Array vergrößert, was append ermöglicht, das Slice zu vergrößern, ohne die Elemente in ein neues Array kopieren zu müssen:

s := make([]Typ, 20, 50)

Die Größe des Slice und die Kapazität des Arrays können mit len und cap abgefragt werden:

Größe, Kapazität := len(s), cap(s)

append hängt ein oder mehrere Elemente an ein Slice an. Ist im Slice kein Platz mehr für alle Elemente, wird ein neues, größeres Slice zurückgegeben:

s = append(s, element)

Da append eine variadische Funktion ist, können ihr auch Slices als Parameter übergeben werden, indem eine Ellipse ('...') angehängt wird:

s = append(s, liste...)

Durch den geschickten Einsatz von Subslicing und append kann ein Element an beliebiger Stelle eingefügt werden. Leider muss hierbei ein Teil des Slice in ein neues Slice kopiert werden, was es untauglich für sehr große Slices macht:

s = append(s[:pos], append([]Typ{element}, s[pos:]...)...)

Effizienter, wenn auch weniger elegant ist der folgende Ansatz, bei dem wir das Slice um ein Element verschoben in sich selbst kopieren, um Platz für das neue Element zu schaffen:

s = append(s, Typ{}) copy(s[pos+1:], s[pos:]) s[pos] = element

Indem wir den Teil des Slice nach dem Element an den Teil vor dem Element anhängen, können wir ein Element aus einer geordneten Liste entfernen:

s = append(s[:pos], s[pos+1:]...)

Um ein Element aus einem ungeordneten Slice zu entfernen, kopieren wir das letzte Element darüber und kürzen anschließend das Slice:

s[pos] = s[len(s)-1] s = s[:len(s)-1]
Gopher_Interfaces.png

Go hat ein sehr einfaches Typsystem: Es verzichtet auf Klassen, verfügt aber über ein leistungsfähiges System aus Interfaces und Structs.

Structs können einfach mit dem type Keyword erstellt werden. Go definiert zwei Sichtbarkeiten für Typen, Funktionen, Methoden und Felder: Sichtbar, wenn der erste Buchstabe des Namens großgeschrieben wurde, und Package-Privat, wenn der erste Buchstabe kleingeschrieben wurde:

type M...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang