Heim >Backend-Entwicklung >Golang >Wie vermeide ich Out-of-Bounds-Fehler beim Slicing in Go?
Slicing: Out of Bounds Error in Go
In Go ist Slicing ein leistungsstarker Vorgang, der es Ihnen ermöglicht, ein neues Slice aus einem zu erstellen bestehende. Es ist jedoch wichtig, die potenziellen Fallstricke zu verstehen, um Laufzeitfehler zu vermeiden.
Das Problem
Der folgende Code zeigt einen Fehler außerhalb der Grenzen beim Schneiden einer Null- Längenscheibe:
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) }
Bei der Ausführung erzeugt dieser Code ein Out-of-bounds Fehler:
a len=5 cap=5 [0 0 0 0 0] b len=0 cap=5 [] panic: runtime error: slice bounds out of range goroutine 1 [running]: main.main() /private/var/folders/q_/53gv6r4s0y5f50v9p26qhs3h00911v/T/compile117.go:10 +0x150
Den Fehler verstehen
Um den Fehler zu verstehen, ist es wichtig, das Konzept des Slice-Slicing zu klären. In Go ist ein Slice ein Verweis auf einen zusammenhängenden Speicherbereich. Wenn Sie ein segmentiertes Slice erstellen, erstellen Sie einen neuen Verweis auf eine Teilmenge des ursprünglichen Slice.
Im Fall des obigen Codes hat das Slice b eine Länge von 0 und eine Kapazität von 5. Gemäß Gemäß der Go-Spezifikation „bezieht sich ein Slice-Index i auf das i-te Element des Slice in seinem aktuellen Zustand.“ Daher ist der Versuch, auf ein Element am Index 1 eines Slice mit einer Länge von 0 zuzugreifen, tabu.
Die Lösung
Um das Out-of- zu vermeiden Bei einem Grenzfehler stellen Sie sicher, dass die beim Slicing verwendeten Indizes innerhalb des gültigen Bereichs für das Original-Slice liegen. Bei Slices wird dieser Bereich durch die Länge und Kapazität des Slice bestimmt.
Zum Beispiel wären die folgenden Operationen gültig:
Fazit
Slicing in Go ist ein grundlegender Vorgang zur Bearbeitung von Daten. Es ist jedoch wichtig, die Einschränkungen zu verstehen, um Laufzeitfehler zu vermeiden. Indem Sie sicherstellen, dass die beim Slicing verwendeten Indizes innerhalb des gültigen Bereichs liegen, können Sie Fehler außerhalb der Grenzen effektiv vermeiden und sicher mit Slices arbeiten.
Das obige ist der detaillierte Inhalt vonWie vermeide ich Out-of-Bounds-Fehler beim Slicing in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!