Go のスライス操作: len(slice) の境界を理解する
なぜ Go では len(slice) からのスライスが許可されるのですか?この疑問は、次のコード スニペットで観察される動作から生じます:
a := []int{1, 2, 3} fmt.Println(a[0:]) fmt.Println(a[1:]) fmt.Println(a[2:]) fmt.Println(a[3:])// doesn't panic - why?? fmt.Println(a[4:])// panics as expected
説明:
スライス式の Go 仕様では、インデックスが 0 の場合に範囲内にあると規定されています。
これは、インデックスの上限があるため、式 a[3:] がパニックにならないことを意味します。 len(a) までの値を指定できます。ただし、インデックスの下限も 3 であるため、結果のスライスは空になります。
len(a) より大きいインデックスは範囲外となり、実行時パニックが発生します。この例では、 a[4:] は len(a) より大きいインデックスの上限を持つスライスを作成しようとするためパニックになります。
したがって、仕様で明示的に許可されているため、Go では len(slice) からのスライスが許可されます。配列および文字列の len(a) までのインデックス。これにより、インデックスの上限が指定された範囲内にあるかどうかを明示的にチェックする必要がなく、便利なスライス操作が可能になります。
以上がスライスを「len(slice)」でスライスするときにパニックにならないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。