コース一覧
    Go基礎:データ構造
    配列

    Go基礎:データ構造

    Goのスライス、マップ、構造体、メソッドを使ったデータ表現を学ぶコースです。

    1
    スライスとマップ
    01. 配列15分
    02. スライス15分
    03. appendで育てる15分
    04. rangeで走査する15分
    05. マップ15分
    06. カンマokイディオム15分
    07. つくる: 検索と集計20分
    08. 第5章クイズ10分
    2
    構造体とメソッド
    01. 構造体15分
    02. 初期化とフィールド15分
    03. メソッド15分
    04. ポインタレシーバ20分
    05. New関数の慣習15分
    06. 構造体のスライス15分
    07. つくる: Itemで再設計20分
    08. 第6章クイズ10分

    配列

    長さが型の一部

    Go

    var prices [3]int

    int が3つ並んだ入れ物です。ここで Go らしいのは、[3]int 全体で1つの型だということです。

    Go

    var a [3]int
    var b [5]int
    a = b   // エラー。型が違う

    長さが違えば別の型です。3個入る箱と5個入る箱は、別物として扱われます。

    値を入れて作る

    Go

    prices := [3]int{1200, 24800, 999}

    個数を数えるのが面倒なときは ... を使えます。

    Go

    prices := [...]int{1200, 24800, 999}   // [3]int になる

    書いた数だけの長さになります。... は「数えておいて」という指示です。

    読み書きと長さ

    Go

    prices[0]        // 1200
    prices[0] = 1300 // 書き換え
    len(prices)      // 3

    添字は 0 から始まります。範囲を超えると実行時に止まります。

    Go

    prices[3]   // panic: index out of range [3] with length 3

    渡すとコピーされる

    ここが最も重要な性質です。配列を関数に渡すと、中身がまるごとコピーされます。

    Go

    func reset(p [3]int) {
    	p[0] = 0
    }
    
    prices := [3]int{1200, 24800, 999}
    reset(prices)
    fmt.Println(prices[0])   // 1200 のまま。変わらない

    呼ばれた側が触ったのはコピーなので、元は無傷です。安全ではありますが、要素が1万個あれば1万個ぶんコピーされます。

    だから配列はあまり使わない

    実際の Go のコードで、配列を直接書くことはほとんどありません。

    プレーンテキスト

    長さを変えられない    商品が増えたら作り直し
    渡すとコピーされる    大きいと重い
    長さが違うと別の型    汎用の関数を書きにくい

    代わりに使うのが、次のレッスンでやるスライスです。

    では配列は何のためにあるのか。スライスの土台です。スライスは内部で配列を指しています。この関係を知っておくと、次のレッスンの理解が早くなります。

    要件

    1. 受け取った3つの値を [3]int の配列に入れる
    2. for で回して合計を求める
    3. 最大値は1件目の値から始めて更新する
    4. 3件 合計M円 最高K円 の形を返す

    ヒント

    配列は初期コードに用意してあります。`prices[i]` で1つずつ取り出せます

    最大値は `max := prices[0]` から始めます。0 から始めないでください

    `if prices[i] > max { max = prices[i] }` で、より大きいものが来たときだけ更新します

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • スライス

      配列との違いを知り、長さの変えられるスライスで出品一覧を持てるようになります。

    • appendで育てる

      appendで要素を追加し、新しい出品を一覧に足せるようになります。

    • rangeで走査する

      for rangeで添字と値を同時に受け取り、一覧を番号つきで表示できるようになります。

    • マップ

      キーと値の組で持つマップを使い、カテゴリごとの件数を集計できるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 配列サイズ固定の同型データの集まり
    • 関数処理に名前を付けて再利用できる単位
    • スライス範囲指定で部分列を取り出す記法
    main.go
    エディタを読み込んでいます

    メモ

    配列

    ⌘S で保存