Heim >Backend-Entwicklung >Golang >Go Slices: Warum haben die Slices c und d ihre jeweiligen Längen und Kapazitäten?

Go Slices: Warum haben die Slices c und d ihre jeweiligen Längen und Kapazitäten?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-28 20:23:13712Durchsuche

Go Slices: Why Do Slices c and d Have Their Respective Lengths and Capacities?

Go-Slices: Kapazität und Länge verstehen

Bei der Arbeit mit Slices in Go ist es wichtig, die Konzepte von Kapazität und Länge zu verstehen. Diese Eigenschaften spielen eine wichtige Rolle bei Slice-Operationen und beeinflussen das Verhalten von Slices beim Slicen oder Anhängen.

Betrachten Sie das folgende Codebeispiel:

func main() {
  a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5

  b := make([]int, 0, 5) // [] len=0 cap=5

  c := b[:2]   // [0,0] len=2 cap=5

  d := c[2:5]  // [0,0,0] len=3 cap=3
}

Dieser Code wirft verschiedene Fragen bezüglich der Länge und auf Kapazität der Scheiben c und d:

  • Warum hat c eine Länge von 2 und enthält [0,0]?

    Obwohl b ursprünglich leer war ([], Länge=0), ist es wichtig zu beachten, dass Go-Arrays und Slices immer mit ihren Nullwerten initialisiert werden. Bei Ganzzahlen ist der Nullwert 0. Wenn Sie also b mit [:2] segmentieren, erstellen Sie ein neues Slice, das die Nullwerte von b erbt.

  • Warum hat d eine Kapazität von 3?

    Wenn Sie ein Slice in Go segmentieren, wird dasselbe zugrunde liegende Array wiederverwendet. In diesem Fall nutzt d dasselbe Backing-Array wie c. Die Kapazität von d wird als End-Start berechnet, wobei Start und Ende die Start- bzw. Endindizes des Slice-Ausdrucks ([2:5]) sind. Daher beträgt die Kapazität von d 5 (Ende) – 2 (Anfang) = 3.

Das obige ist der detaillierte Inhalt vonGo Slices: Warum haben die Slices c und d ihre jeweiligen Längen 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