在 Go 中切片時,必須遵守特定的邊界以避免錯誤。此類錯誤之一是“切片超出範圍”錯誤。當切片表達式導致索引超出允許範圍時,就會發生此錯誤。
在提供的程式碼片段中:
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) }
嘗試使用下列指令建立 c 切片時會發生錯誤表達式 c := b[1:]。這個錯誤不是由下限(可以等於或大於長度)引起的,而是由上界引起的。
在 Go 中,切片的預設上限是切片操作數的長度。但是,在本例中,切片操作數 b 的長度為 0。因此,預設上限變為 0。因此,表達式c := b[1:] 導致下限為1,上限為0 .
這違反了切片規則,該規則規定對於切片,索引必須滿足以下條件條件:
0 <= low <= high <= cap(a)
其中:
在這種情況下,由於1 不小於或等於為0 時,表達式會導致越界錯誤。
要解決此問題,必須在切片時指定明確邊界。例如:
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)
以上是Go 切片時如何避免「切片邊界超出範圍」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!