はじめに
Go では、配列またはスライスをスライスするとき、基になる配列またはスライスの長さを超えると、 パニック。ただし、スライスの場合、この動作は奇妙なことに分岐します。
問題
次の Go コードを考えてみましょう。
スライスが a であることを困惑させます。 [3:] は、長さを超えているように見えても、パニックを引き起こしません。 array.
答え
この動作は Go 言語仕様によって規定されています:
この例では、a は配列であり、その長さは 3 です。ただし、配列の長さまでスプライスすると、つまり、a[3:] は、基になる配列の長さが 3 であるため、有効な範囲内であるとみなされます。
仕様で説明されているように、「インデックスの上限はスライスです」長さではなく容量の上限(a)です。」したがって、この場合、高 - 低 = 3 - 3 = 0 であるため、a[3:] は空のスライスを作成します。
キーの区別
が重要です。スライスの容量を超えるインデックス (つまり、この例では a[4:]) を使用すると、範囲外のままになり、実行時パニックが発生することに注意してください。仕様では、「実行時にインデックスが範囲外の場合、実行時パニックが発生します。」
と明示的に述べられています。以上がGo スライスで `a[len(slice)]` がパニックにならないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。