Heim > Backend-Entwicklung > Golang > Warum gerät man nicht in Panik, wenn man eine Scheibe bei „len(slice)' schneidet?

Warum gerät man nicht in Panik, wenn man eine Scheibe bei „len(slice)' schneidet?

Patricia Arquette
Freigeben: 2024-12-23 04:26:16
Original
570 Leute haben es durchsucht

Why Doesn't Go Panic When Slicing a Slice at `len(slice)`?

Slice-Operationen in Go: Die Grenzen für len(slice) verstehen

Warum erlaubt Go das Slicen von len(slice)? Diese Frage ergibt sich aus dem im folgenden Codeausschnitt beobachteten Verhalten:

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

Erklärung:

Die Go-Spezifikation für Slice-Ausdrücke besagt, dass Indizes im Bereich liegen, wenn 0 <= niedrig <= hoch <= len(a). Wichtig ist, dass für Arrays und Strings die obere Indexgrenze einschließlich len(a) ist. Für Slices ist die obere Indexgrenze cap(a), was in diesem Fall mit len(a) identisch ist.

Dies bedeutet, dass der Ausdruck a[3:] nicht in Panik gerät, da die obere Indexgrenze vorliegt darf bis einschließlich len(a) sein. Da jedoch auch die untere Indexgrenze bei 3 liegt, ist das resultierende Slice leer.

Ein Index größer als len(a) liegt außerhalb des Bereichs und verursacht eine Laufzeitpanik. Im Beispiel gerät a[4:] in Panik, weil es versucht, ein Slice mit einer oberen Indexgrenze größer als len(a) zu erstellen.

Daher erlaubt Go das Slicen von len(slice), da die Spezifikation dies ausdrücklich zulässt Indizes bis einschließlich len(a) für Arrays und Strings. Dies ermöglicht bequeme Slicing-Vorgänge, ohne dass explizite Prüfungen erforderlich sind, um sicherzustellen, dass die obere Indexgrenze innerhalb des angegebenen Bereichs liegt.

Das obige ist der detaillierte Inhalt vonWarum gerät man nicht in Panik, wenn man eine Scheibe bei „len(slice)' schneidet?. 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