1. 3件のうち1件が売切れ
  2. 全部販売中
  3. 全部売切れ
  4. 1件だけ販売中
コース一覧
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分

つくる: 商品集計

条件付きの集計

第3章の内容を全部使います。新しい知識は出てきません。

プレーンテキスト

if 条件で分ける for 繰り返す continue 条件に合わないものを飛ばす 集計 合計・件数・平均

作るのは、売切れを除いた集計です。

プレーンテキスト

販売中2件 合計2199円 平均1099円 (除外1件)

2つの並びを同時に見る

価格の並びと、売切れかどうかの並びを受け取ります。同じ添字が同じ商品を指します。

プレーンテキスト

prices [1200, 999, 24800] soldOut [false, false, true] ↑同じ商品

1つの for で両方を見ます。

Go

for i := 0; i < len(prices); i++ { if soldOut[i] { continue } // ここに来るのは販売中のものだけ }

continue で先に弾くと、集計の本筋が右に寄らずに済みます。前のレッスンで触れた形です。

数える対象が2つある

集めるものが増えます。

プレーンテキスト

販売中の件数 販売中の合計 除外した件数

それぞれ入れ物を用意して、ループの中で更新します。continue で飛ばす直前に、除外の数を1つ増やしてください。

Go

if soldOut[i] { skipped++ continue }

順番が逆だと数えられません。continue から先は実行されないからです。

全部が売切れのとき

販売中が0件になります。ここで平均を出すと 0 で割ることになります。

プレーンテキスト

販売中0件 (除外3件)

合計と平均を書かない形にしてください。前のレッスンでやった、0件を先に弾く判断がそのまま出てきます。

順番に作る

プレーンテキスト

1. 全件を合計する(売切れを無視) 2. continue で売切れを飛ばす 3. 除外の件数を数える 4. 販売中が0件のときを分ける

1段ごとにテストを流してください。

要件

  1. 売切れの商品は集計から外し、除外の件数として数える
  2. 販売中が1件以上なら 販売中N件 合計M円 平均K円 (除外L件) を返す
  3. 販売中が0件なら 販売中0件 (除外L件) を返す
  4. 平均は販売中の合計を販売中の件数で割る

入出力例

onSaleSummary([1200,999,24800], [false,false,true]) → "販売中2件 合計2199円 平均1099円 (除外1件)" onSaleSummary([1000,2000], [false,false]) → "販売中2件 合計3000円 平均1500円 (除外0件)" onSaleSummary([1000,2000,3000], [true,true,true]) → "販売中0件 (除外3件)" onSaleSummary([1200,999], [false,true]) → "販売中1件 合計1200円 平均1200円 (除外1件)"

ヒント

入れ物は3つ要ります。販売中の合計・販売中の件数・除外の件数です

`skipped++` は `continue` より**前**に書いてください。後ろに書くと実行されません

販売中が0件のときは、合計と平均を書かない別の形を返します。ここを忘れると 0 で割って止まります

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

関連レッスン

  • 第3章クイズ

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

  • funcで関数を作る

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

  • 配列

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

  • 構造体

    関連するデータを1つの型にまとめ、Item構造体を定義できるようになります。

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

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

  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • 判断YES/NO 分岐を表す菱形
  • テストバグを見つける工程
main.go
学習モード
エディタを読み込んでいます

メモ

つくる: 商品集計

⌘S で保存