Structs

Structs sind besondere Typen, die zusammengehörige Attribute in einem Typ zusammenfassen. Man denke beispielsweise an das Autoquartett aus der Kindheit, bei dem auf jeder Karte dieselben Werte standen (zumindest so in etwa):

type fahrzeug struct {
    name    string
    hubraum int
    ps      int
    kmh     int
    baujahr int
}

Die Werte auf jeder Karte kann dann in einer Instanz dieses Typs gespeichert werden. In diesem Fall ist fahrzeug ein Typ, dem Werte zugewiesen werden können.

Eine struct erzeugt man auf zwei verschiedene Weisen. Die einfachste Möglichkeit ist folgende:

f := fahrzeug{}

nun kann man mit dem Punkt-Operator (.) auf Felder der Struktur zugreifen:

f.hubraum = 1558

Alternativ kann man eine Struktur auch mit new() erzeugen:

f := new(fahrzeug)

Die Variable f enthält nun einen Zeiger auf die eigentlichen Daten.

In der Praxis werden structs sehr häufig benutzt, weil man Funktionen definieren kann, die nur auf einer konkreten Instanz funktionieren:

func (fz fahrzeug) berechneWert() int {
    // nur ein Beispiel
    // man kann auf die Instanz von Fahrzeug
    // mit der frei wählbaren Variablen in
    // den Klammern zugreifen, hier: fz
    return fz.baujahr * fz.hubraum
}

Diese Funktion wird wie folgt aufgerufen:

wert = f.berechneWert()