1. ホーム
  2. arrays

goで配列のサイズを動的に初期化する

2023-10-10 21:32:50

質問

標準入力から 'x' 個の整数を受け取り、平均を計算して返す小さなアプリケーションをgoで書こうとしています。私はここまでしか得ていません。

func main() {
var elems, mean int
sum := 0

fmt.Print("Number of elements? ")

fmt.Scan(&elems)

var array = new([elems]int)

for i := 0; i < elems; i++ {
    fmt.Printf("%d . Number? ", i+1)
    fmt.Scan(&array[i])
    sum += array[i];
}............

これをコンパイルしようとすると、次のようなエラーメッセージが表示されます。

無効な配列バウンドエレメント

何が間違っているのでしょうか?

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

配列ではなく、スライスを使用する必要があります。

//var array = new([elems]int) - no, arrays are not dynamic
var slice = make([]int,elems) // or slice := make([]int, elems)

"を参照してください。 スライスの使い方と内部を見る "を参照してください。

また、次のようなことも検討したいでしょう。 を使用して、範囲 をループさせることもできます。

// for i := 0; i < elems; i++ { - correct but less idiomatic
for i, v := range slice {