Go のスライス式の動作を理解する
Go では、スライスは、スライス、配列、または文字列から特定の要素を抽出するための強力なメカニズムです。ただし、次のような特定の動作は予期しないように見える場合があります:
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
なぜ a[3:] はパニックにならないのですか?
Go 言語によると仕様では、配列または文字列スライスの場合、インデックスは次の条件を満たす場合に範囲内になります: 0
したがって、インデックスの上限 3 が決定された有効範囲内にあるため、a[3:] はパニックになりません。キャップ(a)による。インデックス 3 から始まり、長さが 0 (len(a) - 3 = 0) であるため、結果は空のスライスになります。
なぜ a[4:] はパニックになるのですか?
一方、a[4:] は、インデックスの上限 4 が len(a) と cap(a) の両方を超えているためパニックになります。仕様では、実行時にインデックスが範囲外になると実行時パニックが発生すると規定されています。
以上がGo の `a[3:]` はスライス パニックを起こさないのに、`a[4:]` はスライス パニックを起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。