質問: 456; // panic fmt.Println(b[0]) } ``` のように書くと、ランタイムにindex out of rangeがpanicとして出ます。 これはどのようにして検知したものなのでしょうか? Arrayはランタイムでもわかるようにサイズを持っていますか? もしサイズを持っていないなら、どのようにして判定していますか? もしサイズを持っているなら、なぜerrとして返却するようなものではなく、panicを起こすように作られているのですか?
回答: によると [golang](/questions/tagged/golang "'golang' のタグが付いた質問を表示") の Array は `len` を持っています (スライスに使えるよう `cap` もあります)。 配列のインデックスが範囲外のときプログラムはクラッシュする(=強制停止させられる)ともあります。 現代の高級言語においては配列の範囲外アクセスは明らかなバグであり直ちに修正が必要とされています。すなわちデバッガで停止させられるのがほとんどすべてのユーザーに望まれた動きです(なので panic )。配列外の誤ったデータで処理を続けることができてもうれしくないですよね。 # 現代の高級言語としては範囲外アクセスをチェックしない [c](/questions/tagged/c "'c' のタグが付いた質問を表示") のほうが例外的存在