ホームページ >バックエンド開発 >Golang >Go の `a[3:]` はスライス パニックを起こさないのに、`a[4:]` はスライス パニックを起こすのはなぜですか?

Go の `a[3:]` はスライス パニックを起こさないのに、`a[4:]` はスライス パニックを起こすのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-10 08:03:10185ブラウズ

Why Doesn't Go's `a[3:]` Slice Panic, But `a[4:]` Does?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。