Middle
Wie sehr wächst die Größe des Slices bei Verwendung der Funktion append?
sobes.tech KI
Antwort von AI
Die Größe des Slices kann je nach aktueller Kapazität cap(slice) unterschiedlich wachsen:
- Wenn die Kapazität nicht ausreicht: Die neue Kapazität ist mindestens doppelt so groß wie die aktuelle, wenn diese kleiner als 1024 ist. Wenn sie größer als 1024 ist, erhöht sich die Kapazität um etwa 25 % der aktuellen Kapazität, bis sie ausreichend ist. Danach kann sie nach oben angepasst werden.
- Wenn die Kapazität ausreicht: Die Größe des Slices erhöht sich genau um die Anzahl der hinzugefügten Elemente, und die Kapazität bleibt unverändert.
// Beispiel für das Verhalten von append bei unzureichender Kapazität
s := make([]int, 0, 0) // Größe 0, Kapazität 0
s = append(s, 1) // Größe 1, Kapazität 1. (0 -> 1)
s = append(s, 2) // Größe 2, Kapazität 2. (1 -> 2)
s = append(s, 3) // Größe 3, Kapazität 4. (2 -> 4)
s = append(s, 4) // Größe 4, Kapazität 4
s = append(s, 5) // Größe 5, Kapazität 8. (4 -> 8)
s2 := make([]int, 0, 1025) // Größe 0, Kapazität 1025
s2 = append(s2, make([]int, 500)...) // Größe 500, Kapazität 1025 (ausreichend)
s2 = append(s2, make([]int, 1000)...) // Größe 1500, Kapazität ungefähr 1025 + 1025*0.25 + epsilon
Der konkrete Algorithmus für das Wachstum der Kapazität befindet sich im runtime und kann zwischen Go-Versionen variieren. Die allgemeinen Regeln (Verdopplung bis 1024, Erhöhung um ca. 25 % danach) bleiben jedoch bestehen.