Verstehen von Änderungen der Slice-Kapazität in der Go-Tour Nr. 11
Die Go-Tour bietet aufschlussreiche Demonstrationen der Funktionen der Sprache, einschließlich Slices. In Folie 11 wird ein Segment von Ganzzahlen manipuliert, um seine Eigenschaften zu demonstrieren. Eine Beobachtung wirft jedoch die Frage auf: Warum ändert sich die Slice-Kapazität in der letzten Zeile, während sie in den vorherigen Vorgängen unverändert bleibt?
Die Auswirkungen der Slice-Manipulation auf die Kapazität verstehen
Slice-Kapazität bezieht sich auf die maximale Anzahl von Elementen, die das zugrunde liegende Array aufnehmen kann, bevor eine Neuzuweisung erforderlich ist. Das Go Tour-Code-Snippet führt die folgenden Vorgänge aus:
Gründe zur Kapazitätsreduzierung in der letzten Zeile
Visualisierung der Header-Änderungen
Der folgende Code druckt den Slice-Header, der zusätzliche Einblicke bietet die Änderungen:
<code class="go">func printSlice(s []int) { sh := (*reflect.SliceHeader)(unsafe.Pointer(&s)) fmt.Printf("header=%+v len=%d cap=%d %v\n", sh, len(s), cap(s), s) }</code>
Die Ausgabe zeigt, dass sich der Header-Datenzeiger von 272990208 auf 272990216 bewegt, wenn die ersten beiden Elemente gelöscht werden, wodurch die Slice-Kapazität verringert wird.
Das obige ist der detaillierte Inhalt vonWarum verringert sich die Slice-Kapazität, wenn die ersten beiden Elemente in Go Tour-Folie 11 gelöscht werden, nicht jedoch, wenn die Slice-Länge verlängert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!