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)