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]