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

total := 0 for i := 0; i < len(prices); i++ { total += prices[i] }

外で入れ物を用意して、中で足していくという形です。入れ物をループの中で作ると毎回リセットされてしまうので、必ず外に置きます。

Go ではゼロ値があるので、var total int と書くだけでも 0 から始められます。

平均を出すときの落とし穴

合計を件数で割れば平均です。ただし int どうしの割り算は小数が消えます。

Go

total := 1200 + 999 + 800 // 2999 average := total / 3 // 999。999.67 ではない

小数まで欲しいなら、第2章でやったとおり float64 に変換します。

Go

average := float64(total) / float64(len(prices)) // 999.6666...

どちらが正しいかは場面によります。 平均価格を「円」で表示するなら int のままで十分ですし、統計として扱うなら小数が要ります。Go が勝手に決めないぶん、書く側が選ぶことになります。

0件のときに落ちる

合計を件数で割るコードには、必ずこの穴があります。

Go

average := total / len(prices) // 0件のとき panic

プレーンテキスト

panic: runtime error: integer divide by zero

0で割ると実行時に止まります。 商品が1件も無い状態は普通に起こるので、先に弾きます。

Go

if len(prices) == 0 { return 0 }

テストで 0 件を試さないと気づけない類のバグです。このコースの演習には、意図して0件のテストを入れてあります。

件数を数える

条件に合うものだけ数えるのも、同じ形です。

Go

count := 0 for i := 0; i < len(prices); i++ { if prices[i] >= 1000 { count++ } }

合計・件数・最大・最小は、どれも「外に入れ物、中で更新」の形で書けます。最大値だけは、入れ物の初期値を 0 にするとすべて負の数のときに間違えます。1件目の値で始めるのが安全です。

要件

  1. N件 合計M円 平均K円 の形を返す
  2. 平均は合計を件数で割る(int の割り算なので小数は切り捨て)
  3. 0件のときは 0件 だけを返す。割り算をしない

入出力例

summarize([1200,999,800]) → "3件 合計2999円 平均999円" summarize([1200]) → "1件 合計1200円 平均1200円" summarize([1000,2000]) → "2件 合計3000円 平均1500円" summarize([0,100]) → "2件 合計100円 平均50円"

ヒント

最初に `if len(prices) == 0 {` で弾いてください。ここが無いと 0 で割って実行時に止まります

合計の入れ物 `total := 0` はループの外に置きます。中に置くと毎回 0 に戻ります

平均は `total/len(prices)` です。int どうしの割り算なので、小数は自動で切り捨てられます

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

関連レッスン

  • つくる: 商品集計

    第3章の知識を統合し、売切れを除いた条件付き集計を書けるようになります。

  • 第3章クイズ

    if、for、switch、集計についての理解を確認します。

  • funcで関数を作る

    引数と戻り値に型を書いて関数を定義し、手数料の計算を切り出せるようになります。

  • 配列

    長さが型の一部である配列を知り、固定長の並びを扱えるようになります。

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

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

  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • セット重複を持たない順序なし集合
  • テストバグを見つける工程
main.go
学習モード
エディタを読み込んでいます

メモ

ループで集計

⌘S で保存