Senior
Was ist ein Slice? Was steckt unter der Haube eines Slices? Wie funktioniert die Funktion append?
sobes.tech KI
Antwort von AI
In Go ist ein Slice ein dynamisches Array, das eine Struktur mit drei Feldern darstellt:
- Zeiger auf das Array (unterliegendes Array im Speicher)
- Länge (len) — Anzahl der Elemente im Slice
- Kapazität (cap) — maximale Anzahl der Elemente, die das unterliegende Array ab dem Zeiger aufnehmen kann
Im Hintergrund ist ein Slice eine kleine Struktur, ungefähr so:
type sliceHeader struct {
Data uintptr // Zeiger auf das erste Element des Arrays
Len int
Cap int
}
Die Funktion append fügt Elemente zum Slice hinzu. Wenn die Länge des Slices kleiner als die Kapazität ist, schreibt append einfach die neuen Elemente in das unterliegende Array und erhöht die Länge. Wenn die Länge die Kapazität erreicht, weist append ein neues Array mit erhöhter Kapazität zu (normalerweise das Doppelte), kopiert die alten Elemente, fügt die neuen hinzu und gibt ein neues Slice mit aktualisiertem Zeiger zurück.
Beispiel:
s := []int{1, 2, 3}
s = append(s, 4) // wenn cap(s) > len(s), fügt einfach 4 hinzu
// wenn cap(s) == len(s), weist es ein neues Array zu, kopiert [1,2,3], fügt 4 hinzu
Auf diese Weise kann append ein neues Slice zurückgeben, und es ist wichtig, das Ergebnis erneut zuzuweisen.