以下のコードはコンパイル可能でしょうか?
package main
func main() {
foo := [2]int{1, 2}
const foolen = len(foo)
println(foolen)
}
- コンパイルできる
- コンパイルできない
回答と解説
正解は「1. コンパイルできる」です。定数値はコンパイル時に決まる値のみが使えます (コンパイル時に決まるにも関わらず使えない例もあります)。配列に対する len
関数の結果はコンパイル時に決まり、また定数値に使えるようです。もちろん、配列ではなくスライスに対する len
関数の結果は、コンパイル時には決まらないので使えません。ちなみにですが、今後定数に使える値が Go 1.x の間に増えるかと言うと微妙で、後方互換性の問題 (例) もあり、なかなか難しいと思われます。