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
Freigeben: 2024-11-02 09:56:31
Original
891 Leute haben es durchsucht

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>
Nach dem Login kopieren

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]
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage