capypad
0 Tage Serie
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
go
1
2
3
4
5
6
7
8
func efficientAppend() {
// Pre-allocate capacity to avoid multiple reallocations
data := 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.