Go でスライスをスライスするときは、エラーを避けるために特定の境界を遵守することが不可欠です。そのようなエラーの 1 つは、「スライスの境界が範囲外です」エラーです。このエラーは、スライス式のインデックスが許容範囲外になる場合に発生します。
提供されたコード スニペット内:
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 := 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 中国語 Web サイトの他の関連記事を参照してください。