Heim >Backend-Entwicklung >Golang >Warum verändert das Weglassen von Elementen zu Beginn eines Go-Slices dessen Kapazität?

Warum verändert das Weglassen von Elementen zu Beginn eines Go-Slices dessen Kapazität?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-02 09:56:31891Durchsuche

Why Does Dropping Elements from the Beginning of a Go Slice Change Its Capacity?

Warum ändert sich die Kapazität eines Slice, wenn die ersten n Elemente gelöscht werden?

In Go werden Slices als Strukturen implementiert, die der folgenden ähneln:

<code class="go">type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}</code>

Wenn wir die zum Drucken des Slice verwendete Funktion so ändern, dass sie den Zeiger auf das zugrunde liegende Array einschließt, erhalten wir die folgende Ausgabe:

ptr=0x450000 len=6 cap=6 [2 3 5 7 11 13]
ptr=0x450000 len=4 cap=6 [2 3 5 7]
ptr=0x450008 len=2 cap=4 [5 7]

Wie Sie sehen können, funktioniert das Weglassen der letzten beiden Elemente Der Zeiger wird nicht geändert, während das Löschen der ersten beiden Elemente dies tut. Dies liegt daran, dass ein Slice im Wesentlichen ein Fenster in das zugrunde liegende Array ist. Das Löschen von Elementen vom Anfang erzwingt, dass das Slice an einer neuen Position mit einem anderen Zeiger neu erstellt wird, während das Löschen von Elementen vom Ende lediglich die Länge des vorhandenen Slice anpasst.

Weitere Informationen finden Sie im Folgenden Ressourcen:

  • [Go Slices: Verwendung und Interna](https://blog.golang.org/slices)
  • [Slice-Typen](https://go.dev /ref/spec#Slice_types)
  • [Slice-Ausdrücke](https://go.dev/ref/spec#Slice_expressions)

Das obige ist der detaillierte Inhalt vonWarum verändert das Weglassen von Elementen zu Beginn eines Go-Slices dessen Kapazität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn