go
に書いているマージソート実装で、配列に必要な長さを計算しようとしています。それは次のようになります。go test
を実行しているときにGoエラー:不定配列バウンド
func merge(array []int, start, middle, end int) {
leftLength := middle - start + 1
rightLength := end - middle
var left [leftLength]int
var right [rightLength]int
//...
}
私は、この苦情を取得:
./mergesort.go:6: non-constant array bound leftLength
./mergesort.go:7: non-constant array bound rightLength
私はgo
を想定して計算した値で配列の長さをインスタンス化するユーザーを楽しむことはありません。それは定数を受け入れるだけです。私はあきらめて代わりにスライスを使うべきですか? スライスは、リンクされたリストか、いっぱいになると大きな配列にコピーされるという意味の動的配列です。
スライスがダイナミックアレイであることを「期待している」とはどういう意味ですか? [スライスが実際に何であるかを読む](https://blog.golang.org/go-slices-usage-and-internals)。 –
これは、Goでどのようなスライスが作成されるかです。フードの下では、配列へのポインタに過ぎません。 – user937284
@TimCooper面白いです。 Arrayの複雑なインターフェイスを与える代わりに、スライスは配列の操作を簡単にする別のレイヤーですか? – Breedly