スライス: 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 スライスの作成時に無効なスライス式が原因で発生します。
Go では、配列またはスライスのスライスは次の規則に従います。
スライス式 b[1:] は、下限 1 で新しいスライス c を作成しようとします。ただし、上限は欠落しており、デフォルトでは b の長さ (0) になります。これにより、下限が上限よりも大きいスライスが作成され、「範囲外」が発生します。 error.
このエラーを修正するには、スライス式の上限が下限以上であることを確認する必要があります。たとえば、次の式を使用して有効なスライス c を作成できます。
c := b[1:2]
これにより、下限が 1、上限が 2 のスライス c が作成されます。これは、1 < であるため有効です。 = 2
以上がGo で `b[1:]` をスライスすると範囲外エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。