Sobes.tech
Junior

Was ist der entscheidende Unterschied zwischen Slices und Arrays in Go?

sobes.tech KI

Antwort von AI

Slices sind dynamisch änderbare Ansichten von Arrays.

Eigenschaft Array Slice
Größe Feste Größe, bei der Erstellung festgelegt Dynamisch, kann sich ändern
Typ [n]T (wobei n die Größe ist, T der Typ) []T (wobei T der Typ ist)
Übergabe an Funktionen Nach Wert (Kopie) Nach Referenz auf das zugrunde liegende Array, es werden head, len und cap übergeben (tatsächlich wird eine neue SliceHeader-Struktur mit Kopien dieser Felder erstellt)
Erstellung var a [5]int oder b := [3]string{"a", "b", "c"} var s []int oder t := []int{1, 2, 3} oder u := make([]int, 5)
Leistung Vorhersehbarer aufgrund der festen Größe, kann bei kleinen Größen Vorteile haben Kann bei Größenänderungen Overhead verursachen (Neallokation des zugrunde liegenden Arrays)
// Beispiel Array
var arr [3]int = [3]int{1, 2, 3}

// Beispiel mit Slice, erstellt aus Array
slice := arr[1:] // Slice {2, 3}

// Beispiel für die Erstellung eines Slices
s := []int{10, 20, 30} // zugrunde liegendes Array {10, 20, 30}, Länge = 3, Kapazität = 3

// Änderung des Slices
s = append(s, 40) // jetzt s {10, 20, 30, 40}. Bei Kapazitätsmangel wird ein neues Array erstellt, Länge = 4, Kapazität = 6 (normalerweise Verdopplung der Kapazität).

// Änderung eines Elements im Slice ändert das zugrunde liegende Array
slice[0] = 99 // arr ist jetzt {1, 99, 3}
fmt.Println(arr)