Heim >Backend-Entwicklung >Golang >Wie vermeide ich „Slice Bounds Out of Range'-Fehler beim Slicing in Go?
Beim Slicing eines Slice in Go ist es wichtig, bestimmte Grenzen einzuhalten, um Fehler zu vermeiden. Ein solcher Fehler ist der Fehler „Slice-Grenzen außerhalb des Bereichs“. Dieser Fehler tritt auf, wenn der Slice-Ausdruck zu Indizes führt, die außerhalb des zulässigen Bereichs liegen.
Im bereitgestellten Codeausschnitt:
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) }
Der Fehler tritt auf, wenn versucht wird, das C-Slice mit zu erstellen Ausdruck c := b[1:]. Dieser Fehler entsteht nicht durch die Untergrenze (die gleich oder größer als die Länge sein kann), sondern durch die Obergrenze.
In Go ist die standardmäßige Obergrenze für das Slicing die Länge des Slicing-Operanden . In diesem Fall hat der geschnittene Operand b jedoch eine Länge von 0. Daher wird die standardmäßige obere Grenze zu 0. Folglich führt der Ausdruck c := b[1:] zu einer unteren Grenze von 1 und einer oberen Grenze von 0 .
Dies verstößt gegen die Slicing-Regel, die besagt, dass die Indizes für Slices Folgendes erfüllen müssen Bedingung:
0 <= low <= high <= cap(a)
Wobei:
Da in diesem Fall 1 nicht kleiner oder gleich 0 ist, ist der Ausdruck führt zu einem Fehler außerhalb der Grenzen.
Um dieses Problem zu beheben, müssen beim Slicing explizite Grenzen angegeben werden. Zum Beispiel:
c := b[1:1] // Slice from index 1 to 1 (empty slice) c := b[1:2] // Slice from index 1 to 2 (contains the element at index 1) c := b[1:cap(b)] // Slice from index 1 to the capacity of the operand (contains all elements)
Das obige ist der detaillierte Inhalt vonWie vermeide ich „Slice Bounds Out of Range'-Fehler beim Slicing in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!