Heim > Backend-Entwicklung > Golang > Warum verursacht das Schneiden von „b[1:]' einen Out-of-Bounds-Fehler in Go?

Warum verursacht das Schneiden von „b[1:]' einen Out-of-Bounds-Fehler in Go?

Mary-Kate Olsen
Freigeben: 2024-12-05 03:43:14
Original
766 Leute haben es durchsucht

Why Does Slicing `b[1:]` Cause an Out-of-Bounds Error in Go?

Slicing: Out of Bounds-Fehler in Go

Beim Ausführen des folgenden Codes:

package main

import "fmt"

func main() {
    a := make([]int, 5)
    printSlice("a", a)
    b := make([]int, 0, 5)
    printSlice("b", b)
    c := b[1:]
    printSlice("c", c)
}


func printSlice(s string, x []int) {
    fmt.Printf("%s len=%d cap=%d %v\n",
        s, len(x), cap(x), x)
}
Nach dem Login kopieren

Sie stoßen auf eine Fehler „Außerhalb der Grenzen“. Dieser Fehler tritt aufgrund eines ungültigen Slicing-Ausdrucks beim Erstellen des C-Slices auf.

In Go folgt das Slicing eines Arrays oder Slice diesen Regeln:

  • Indizes liegen im Bereich, wenn 0 < = low <= high <= len(a) für Arrays oder Strings.
  • Für Slices ist die obere Indexgrenze standardmäßig auf die Slice-Kapazität (cap(a)) anstelle ihrer Länge.

Der Slicing-Ausdruck b[1:] versucht, ein neues Slice c mit einer unteren Grenze von 1 zu erstellen. Allerdings ist die obere Grenze fehlt und hat standardmäßig die Länge von b, die 0 ist. Dies führt zu einem Slice mit einer Untergrenze, die größer als seine Obergrenze ist, was zum Fehler „Außerhalb der Grenzen“ führt.

Um dies zu korrigieren Fehler auftritt, müssen Sie sicherstellen, dass die Obergrenze des Slicing-Ausdrucks größer oder gleich der Untergrenze ist. Sie könnten beispielsweise den folgenden Ausdruck verwenden, um ein gültiges Slice c zu erstellen:

c := b[1:2]
Nach dem Login kopieren

Dadurch wird ein Slice c mit einer Untergrenze von 1 und einer Obergrenze von 2 erstellt, das gültig ist, da 1 < = 2 <= cap(b) (die Kapazität von b beträgt 5).

Das obige ist der detaillierte Inhalt vonWarum verursacht das Schneiden von „b[1:]' einen Out-of-Bounds-Fehler in Go?. 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