Warum ändert dieses Slice seine Kapazität in Go?
In der erwähnten Folie „A Tour of Go“ enthält das Snippet Operationen für ein Stück ganzer Zahlen. Während sich die Länge des Slice ständig ändert, scheint die Kapazität in der letzten Zeile abzunehmen. Dieses Verhalten wirft Fragen zur Veränderlichkeit der Slice-Kapazität auf.
Kapazitätsänderung von 6 auf 4
Die Kapazität eines Slice stellt die Anzahl der Slots dar, die es aufnehmen kann. Anfänglich hat das Slice eine Kapazität von 6. Wenn Daten vom Ende des Slice entfernt werden (s = s[2:]), bleibt die Kapazität unverändert, da sich der Abstand zwischen dem Startindex und dem Ende des Backing-Arrays nicht ändert.
Wenn jedoch der Startindex des Slice durch Weglassen seiner ersten beiden Werte nach vorne verschoben wird (s = s[2:]), verringert sich der Abstand zwischen dem Startindex und dem Ende des Hintergrundarrays, was zu a führt reduzierte Kapazität von 4. Dies liegt daran, dass das Slice jetzt einen kleineren Teil des Arrays einnimmt.
Warum nur die letzte Zeile ihre Kapazität ändert
Die Kapazität ändert sich nur, wenn Der Startindex des Slice wird geändert. Die anderen Vorgänge, wie das Schneiden des Slice auf die Länge Null oder das Erweitern seiner Länge, haben keinen Einfluss auf die Kapazität, da sie den Startindex nicht ändern.
Slice-Header
Für ein tieferes Verständnis können Sie den Header des Slice mithilfe von Reflektion drucken, wodurch die Änderungen im Datenzeiger angezeigt werden. Das Datenfeld des Headers gibt den Startindex des Slice innerhalb des Backing-Arrays an, während Cap die Kapazität darstellt.
Im letzten Aufruf wird das Datenfeld nach vorne verschoben, wodurch die Kapazität um den Abstand zwischen dem Startindex verringert wird und das Ende des Hintergrundarrays wird verringert.
Das obige ist der detaillierte Inhalt vonWarum ändert das Schneiden eines Slice in Go manchmal seine Kapazität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!