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) }
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:
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]
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!