Zusammengesetzte Literale in Go

Jay Singh 23 August 2022
  1. Slice zusammengesetzte Literale in Go
  2. Array zusammengesetzte Literale in Go
Zusammengesetzte Literale in Go

Go verfügt über verschiedene integrierte Bezeichnertypen, die auch als vordeklarierte Typen bezeichnet werden, z. B. boolean, string, numeric (float32, float64, int, int8, int16, int32, complex) usw.

Es gibt auch zusammengesetzte Typen, die aus vordeklarierten Typen bestehen. Werte für Arrays, Strukturen, Slices und Maps werden mit zusammengesetzten Literalen erstellt.

Bei jeder Bewertung entsteht ein neuer Wert. Es besteht aus dem Typ des Literals, gefolgt von einer geschweiften Liste von Elementen.

Sehen wir uns einige zusammengesetzte Literalinstanzen an.

Slice zusammengesetzte Literale in Go

Slice ist ein zusammengesetzter Datentyp, der ähnlich wie ein Array funktioniert, da er Elemente desselben Datentyps enthält. Der entscheidende Unterschied zwischen einem Array und einem Slice besteht darin, dass ein Slice seine Größe dynamisch ändern kann, ein Array hingegen nicht.

package main

import "fmt"

func main() {
    s1 := []int{1, 2, 3, 4}
    fmt.Println(s1)
}

Ausgabe:

[1 2 3 4]

Array zusammengesetzte Literale in Go

Wenn eine Karte einer anderen zugewiesen wird, teilen sich die beiden Karten alle (unterliegenden) Komponenten. Das Hinzufügen von Elementen zu (oder das Entfernen von Elementen aus) einer Karte wirkt sich auf die andere aus.

Wenn ein Slice einem anderen zugewiesen wird, teilen sich die beiden alle (zugrunde liegenden) Komponenten, genau wie Map-Zuweisungen. Ihre relative Länge und Kapazität sind gleich.

Wenn sich die Länge oder Kapazität eines Slice später ändert, spiegelt sich die Änderung nicht im anderen Slice wider. Alle Elemente werden vom Quellarray in das Zielarray kopiert, wenn eines einem anderen zugewiesen wird.

Die beiden Arrays teilen sich keine Elemente.

package main

import "fmt"

func main() {
    m0 := map[int]int{0: 2, 1: 3, 2: 4}
    m1 := m0
    m1[0] = 4
    fmt.Println(m0, m1)

    s0 := []int{5, 6, 7}
    s1 := s0
    s1[0] = 4
    fmt.Println(s0, s1)

    a0 := [...]int{5, 6, 7}
    a1 := a0
    a1[0] = 4
    fmt.Println(a0, a1)
}

Ausgabe:

map[0:4 1:3 2:4] map[0:4 1:3 2:4]
[4 6 7] [4 6 7]
[5 6 7] [4 6 7]