1. ホーム
  2. go

Go エラー: 配列の結合が一定でない

2023-09-17 14:09:37

質問

で書いているマージソートの実装で、配列に必要な長さを計算しようとしています。 go . 以下のような感じです。

func merge(array []int, start, middle, end int) {
  leftLength := middle - start + 1
  rightLength := end - middle
  var left [leftLength]int
  var right [rightLength]int
  //...
}

を実行すると、次のような問題が発生します。 go test :

./mergesort.go:6: non-constant array bound leftLength
./mergesort.go:7: non-constant array bound rightLength

と仮定します。 go は、ユーザーが計算された値で配列の長さをインスタンス化することを楽しめません。それは 定数 . あきらめて、代わりにスライスを使うべきでしょうか?私は スライス は動的な配列で、リンクリストになっているか、いっぱいになるとより大きな配列にコピーされることを意味します。

どのように解決するのですか?

このような配列は、実行時に計算された値でインスタンス化することはできません。代わりにmakeを使用して、目的の長さのスライスを初期化します。以下のような感じでしょうか。

left := make([]int, leftLength)