Heim > Backend-Entwicklung > Golang > Warum geht „a[3:]' Slice Panic nicht, aber „a[4:]' schon?

Warum geht „a[3:]' Slice Panic nicht, aber „a[4:]' schon?

Linda Hamilton
Freigeben: 2024-12-10 08:03:10
Original
184 Leute haben es durchsucht

Why Doesn't Go's `a[3:]` Slice Panic, But `a[4:]` Does?

Das Slice-Ausdrucksverhalten von Go verstehen

In Go ist Slicing ein leistungsstarker Mechanismus zum Extrahieren bestimmter Elemente aus einem Slice, Array oder String. Bestimmte Verhaltensweisen können jedoch unerwartet erscheinen, wie zum Beispiel die folgenden:

a := []int{1, 2, 3}
fmt.Println(a[0:])
fmt.Println(a[1:])
fmt.Println(a[2:])
fmt.Println(a[3:]) // doesn't panic - why??
fmt.Println(a[4:]) // panics as expected
Nach dem Login kopieren

Warum gerät ein[3:] nicht in Panik?

Laut der Go-Sprache Spezifikation: Für Array- oder String-Slices liegen die Indizes im Bereich, wenn sie die folgende Bedingung erfüllen: 0 <= niedrig <= hoch <= len(a). Für Slices ist die obere Indexgrenze jedoch cap(a) und nicht len(a). In diesem Fall hat das zugrunde liegende Array eine Kapazität von 3, was seiner Länge entspricht.

Daher gerät a[3:] nicht in Panik, da die obere Indexgrenze von 3 innerhalb des ermittelten gültigen Bereichs liegt durch cap(a). Dies führt zu einem leeren Slice, da es bei Index 3 beginnt und eine Länge von 0 hat (len(a) - 3 = 0).

Warum gerät ein[4:] in Panik?

Andererseits gerät a[4:] in Panik, weil die obere Indexgrenze von 4 sowohl len(a) als auch cap(a) überschreitet. Die Spezifikation besagt, dass Indizes, die zur Laufzeit außerhalb des Bereichs liegen, zu einer Laufzeitpanik führen.

Das obige ist der detaillierte Inhalt vonWarum geht „a[3:]' Slice Panic nicht, aber „a[4:]' schon?. 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