Slices und ihre zugrunde liegenden Arrays in Go verstehen
In Go stellt ein Slice ein zusammenhängendes Segment eines zugrunde liegenden Arrays dar. Durch das Schneiden eines Arrays wird ein neues Slice erstellt, das auf dasselbe zugrunde liegende Array wie das Original verweist, jedoch über eine eigene Länge und Kapazität.
Betrachten Sie das folgende Beispiel, in dem ein Slice aus einem Array erstellt wird:
nums := [3]int{1, 2, 3} numSlice := nums[:2]
In diesem Fall enthält das Slice numSlice die ersten beiden Elemente des Arrays nums. Allerdings verweisen sowohl die Slice-NummerSlice als auch die ursprünglichen Array-Nummern auf dasselbe zugrunde liegende Array im Speicher.
Das Hinzufügen von Elementen zum Slice ändert das zugrunde liegende Array. Wenn jedoch die Kapazitätsgrenze des Slice erreicht ist, muss die Größe des zugrunde liegenden Arrays geändert werden, um die zusätzlichen Elemente aufzunehmen.
Um auf das zugrunde liegende Array eines Slice zuzugreifen, können Sie die Pakete „reflect“ und „unsafe“ in Go verwenden. Der Typ „reflect.SliceHeader“ bietet Zugriff auf den Zeiger des zugrunde liegenden Arrays.
s := []int{1, 2, 3, 4} hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) data := *(*[4]int)(unsafe.Pointer(hdr.Data))
Dieser Code ruft das zugrunde liegende Array als Zeiger auf ein typisiertes Array (*[4]int) ab und ermöglicht so die Änderung des Arrays direkt.
Das obige ist der detaillierte Inhalt vonIn welcher Beziehung stehen Go-Slices zu ihren zugrunde liegenden Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!