1. 3件の価格
  2. 最大が1件目
  3. 全部同じ
  4. 0が混ざる
コース一覧
Go入門
配列

Go入門

変数とゼロ値、Go唯一のループであるfor、複数戻り値とエラー処理、スライスとマップ、構造体とメソッド、ゴルーチンによる並行処理、net/httpによるAPI開発まで、Goの基礎を、毎レッスン実際にコードを書き、フリマアプリのAPIをGoで作りながら学びます。

1
Hello, Go
01. Goとは15分
02. 実行してみる15分
03. packageとmain15分
04. fmtで出力する15分
05. go buildと1バイナリ15分
06. つくる: 起動バナー20分
07. 第1章クイズ10分
2
変数と型
01. varで宣言する15分
02. := の短縮宣言15分
03. ゼロ値(Goならでは)15分
04. 基本の型15分
05. 暗黙変換なし15分
06. 定数とiota15分
07. つくる: 商品データ表示20分
08. 第2章クイズ10分
3
制御構文(forしかない世界)
01. Goのif15分
02. forしかない世界15分
03. forの七変化15分
04. Goのswitch15分
05. 定番: FizzBuzz15分
06. ループで集計15分
07. つくる: 商品集計20分
08. 第3章クイズ10分
4
関数とエラー処理
01. funcで関数を作る15分
02. 複数戻り値(Goならでは)15分
03. if err != nil(Goの心臓)15分
04. エラーを作る15分
05. deferで後始末15分
06. つくる: 検証つき関数群20分
07. 第4章クイズ10分
5
スライスとマップ
01. 配列15分
02. スライス15分
03. appendで育てる15分
04. rangeで走査する15分
05. マップ15分
06. カンマokイディオム15分
07. つくる: 検索と集計20分
08. 第5章クイズ10分
6
構造体とメソッド
01. 構造体15分
02. 初期化とフィールド15分
03. メソッド15分
04. ポインタレシーバ20分
05. New関数の慣習15分
06. 構造体のスライス15分
07. つくる: Itemで再設計20分
08. 第6章クイズ10分
7
ゴルーチンと並行処理のさわり
01. ゴルーチン15分
02. チャネル20分
03. 待ち合わせ20分
04. 並行の落とし穴20分
05. つくる: 並行集計20分
06. 第7章クイズ10分
8
Web API(net/http)
01. サーバーを立てる20分
02. ハンドラ関数20分
03. JSONを返す20分
04. ルーティング20分
05. 一覧API20分
06. 詳細APIと40420分
07. 出品API20分
08. つくる: API主要部完成25分
09. 第8章クイズ10分
9
総合制作
01. 仕様互換を仕上げる25分
02. Node版と差し替える25分
03. 1バイナリでデプロイ25分
04. 自由拡張25分
05. 完成と次のステップ20分

配列

長さが型の一部

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円 の形を返す

入出力例

arraySummary(1200, 24800, 999) → "3件 合計26999円 最高24800円" arraySummary(50000, 100, 200) → "3件 合計50300円 最高50000円" arraySummary(1000, 1000, 1000) → "3件 合計3000円 最高1000円" arraySummary(0, 500, 0) → "3件 合計500円 最高500円"

ヒント

配列は初期コードに用意してあります。`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 で保存