Lassen Sie uns sagen, dass ich die folgende Reihe von Ints der Länge 3:Wie erhält man das zugrunde liegende Array eines Slice in Go?
nums := [3]int{1,2,3}
Dann packe ich die Scheibe nur die ersten beiden Artikel
numSlice := nums[:2]
cap
auf numSlice Aufrufen und nums ergibt in beiden Fällen 3 und len
ergibt 2 bzw. 3.
Wenn ich dann zu diesem Slice (numSlice = append(numSlice, 10)
) anhängen, ist das zugrunde liegende Array (nums
) jetzt [1 2 10]
. cap
bleibt bei 3 für beide, wie die zugrunde liegende Anordnung der Schicht das gleiche ist, und len für die Scheibe ist nun 3.
Wenn jedoch I diese Scheibe wieder (numSlice = append(numSlice, 20)
), die zugrunde liegende Anordnung der Scheibe append muss ändern - wir sehen das ist der Fall, wenn cap
jetzt für numSlice verdoppelt hat und len ist jetzt 4.
Sorry für die übertriebene Erklärung, nur durch mich selbst gehen, aber kann mir jemand erklären, was passiert unter der Haube zu das zugrunde liegende Array und wie bekomme ich den Verweis auf das neue Array?
Dieser Beitrag ist auch hilfreich: http://blog.golang.org/slices – leeor
Bemerkenswert, dass der 'Data' nicht zu dem Punkt, vielleicht Start des Backing-Arrays: nur zum 0-ten Element des Slices. Im Fall 'numSlice: = nums [1:]' würde es also tatsächlich auf das zweite Element des Arrays zeigen. [Beispiel] (http://play.golang.org/p/8fCCz9d7rG) – djd
Als eine vielleicht dumme Frage, was wäre die Leistung dabei? – Highstead