Heim >Backend-Entwicklung >Golang >Warum haben die Go-Slices „c' und „d' nach dem Slicen unterschiedliche Werte und Kapazitäten?

Warum haben die Go-Slices „c' und „d' nach dem Slicen unterschiedliche Werte und Kapazitäten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-21 02:35:10239Durchsuche

Why Do Go Slices `c` and `d` Have Different Values and Capacities After Slicing?

Slice-Kapazität und -Länge in Go verstehen

Wenn man Go anhand seines Tutorials lernt, stößt man möglicherweise auf Fragen wie:

Frage:

Warum werden im Code unten die Slices c und d mit initialisiert? unterschiedliche Werte und Kapazitäten?

func main() {
  a := make([]int, 5)
  b := make([]int, 0, 5)
  c := b[:2]
  d := c[2:5]
}

Antwort:

In Go werden Slices durch Arrays unterstützt. Wenn mit make ein Slice erstellt wird, wird das Hintergrundarray mit seinem Nullwert initialisiert. In diesem Fall handelt es sich um ein Array von Ganzzahlen, die jeweils auf 0 initialisiert sind.

Wenn c als Teil von b erstellt wird, verwendet es dasselbe Hintergrundarray wie b. Da b mit einem Array der Länge Null erstellt wurde, sind die ersten beiden Elemente des Hintergrundarrays 0. Daher hat c eine Länge von 2 und seine Elemente sind beide 0.

d wird als Slice von erstellt c beginnt bei Index 2. Es verwendet außerdem dasselbe Hintergrundarray wie c. Seine Kapazität ist jedoch unterschiedlich, da es sich um einen vollständigen Slice-Ausdruck handelt. Ein vollständiger Slice-Ausdruck hat eine Kapazität, die der Differenz zwischen seinem ersten und letzten Index entspricht, in diesem Fall 5 - 2 = 3.

Zusätzliche Ressourcen:

  • [Go Slices: Verwendung und Interna](https://blog.golang.org/slices)
  • [Arrays, Slices (und Strings): Die Mechanik des „Anhängens“](https://blog.golang.org/slices- im Anhang)

Das obige ist der detaillierte Inhalt vonWarum haben die Go-Slices „c' und „d' nach dem Slicen unterschiedliche Werte und Kapazitäten?. 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