go / intermediate
Snippet
Performance-Optimierung durch Slice-Kapazität
Beim Verwenden von 'append' muss Go das zugrunde liegende Array eventuell neu zuweisen, wenn die Kapazität überschritten wird. Durch die Angabe einer Kapazität in 'make()' reduzieren Sie den CPU-Overhead und die Speicherfragmentierung.
snippet.go
1
2
3
4
5
6
7
8
func efficientAppend() {// Pre-allocate capacity to avoid multiple reallocationsdata := make([]int, 0, 100)for i := 0; i < 100; i++ {data = append(data, i)}fmt.Println(len(data), cap(data))}
Erklärung
1
make([]int, 0, 100)
Initialisiert ein Slice mit Länge 0 und Platz für 100 Elemente.
2
append(data, i)
Fügt Elemente hinzu, ohne eine Neuzuweisung auszulösen, bis 100 erreicht sind.
3
cap(data)
Gibt die maximale Anzahl an Elementen zurück, die das Slice ohne Neuzuweisung halten kann.