コース一覧
    Go基礎:制御構文
    ループで集計

    Go基礎:制御構文

    Goの分岐、反復、関数、エラー処理を体系的に学ぶ基礎コースです。

    1
    制御構文(forしかない世界)
    01. Goのif15分
    02. forしかない世界15分
    03. forの七変化15分
    04. Goのswitch15分
    05. 定番: FizzBuzz15分
    06. ループで集計15分
    07. つくる: 商品集計20分
    08. 第3章クイズ10分
    2
    関数とエラー処理
    01. funcで関数を作る15分
    02. 複数戻り値(Goならでは)15分
    03. if err != nil(Goの心臓)15分
    04. エラーを作る15分
    05. deferで後始末15分
    06. つくる: 検証つき関数群20分
    07. 第4章クイズ10分

    ループで集計

    累積の型

    合計を出すコードは、どの言語でもほぼ同じ形になります。

    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件 だけを返す。割り算をしない

    ヒント

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

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

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

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

    関連レッスン

    • つくる: 商品集計

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

    • 第3章クイズ

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

    • funcで関数を作る

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

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

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

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

    メモ

    ループで集計

    ⌘S で保存