go / intermediate
Snippet
Slice-Kapazität steuern mit Drei-Index-Slices
Gos Drei-Index-Slicing slice[low:high:max] begrenzt die Kapazität eines Sub-Slices auf max - low. Dies stellt sicher, dass nachfolgende append-Aufrufe die Kapazität überschreiten und ein neues Array im Hintergrund erstellen, wodurch das Original-Slice vor Überschreiben geschützt wird.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
package mainimport "fmt"func main() {original := []int{10, 20, 30, 40, 50}subSlice := original[1:3:3]fmt.Printf("subSlice: %v, len: %d, cap: %d\n", subSlice, len(subSlice), cap(subSlice))subSlice = append(subSlice, 99)fmt.Printf("After append -> subSlice: %v, original: %v\n", subSlice, original)}
Erklärung
1
subSlice := original[1:3:3]
Erstellt ein Slice von Index 1 bis 3 mit einer auf 2 (3-1) begrenzten Kapazität.
2
cap(subSlice)
Ergibt 2, was der begrenzten Maximalkapazität entspricht.
3
subSlice = append(subSlice, 99)
Löst eine Neuzuweisung aus, da der Append die Kapazität von 2 überschreitet.
4
fmt.Printf("After append -> subSlice: %v, original: %v\n", subSlice, original)
Gibt beide Slices aus, um zu zeigen, dass das Original unverändert bleibt.