1. 在庫10を3個ずつ
  2. ちょうど配りきれるとき
  3. 在庫が足りないとき
  4. 配布数が0のとき
  5. 配布数が負のとき
コース一覧
Go入門
forの七変化

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分

forの七変化

3つの部分は省略できる

for が1種類しかないのに困らないのは、3つの部分をそれぞれ省略できるからです。省略すると、他の言語のループそっくりの形になります。

条件だけ残すと while になる

Go

for stock > 0 { stock-- }

初期化と後処理を消して条件だけ残した形です。他の言語の while (stock > 0) と同じ動きになります。セミコロンも要りません。

Go に while という単語が無いのは、この形で足りるからです。

全部消すと無限ループになる

Go

for { // ずっと続く }

条件が無いので、自分で止めない限り終わりません。止めるには break を使います。

Go

count := 0 for { count++ if count >= 3 { break } }

「回数は決まっていないが、ある条件が来たら抜けたい」ときの形です。入力を受け付け続けるサーバーや、条件が満たされるまで再試行する処理でよく出てきます。

break と continue

プレーンテキスト

break ループを抜ける continue 今回の残りを飛ばして、次の周へ進む

continue は、条件に合わないものを飛ばすときに使います。

Go

for i := 0; i < len(prices); i++ { if prices[i] == 0 { continue // 0円は数えない } total += prices[i] }

if で囲んでも同じことは書けますが、除外したい条件を先に書いて弾くほうが、本筋の処理が右に寄らずに済みます。条件が増えるほど差が出ます。

無限ループの注意

for {} の中で break を書き忘れると、プログラムは止まりません。このコースの採点は30秒で打ち切られるので、タイムアウトとして落ちます。

プレーンテキスト

Execution timed out (30 seconds limit)

この表示が出たら、まず無限ループを疑ってください。条件が一度も真にならない、あるいは変数が変化していない、のどちらかであることがほとんどです。

要件

  1. N人に配ってM個余ります の形を返す
  2. 条件だけを残した for で、引き算を繰り返して求める
  3. 配布数が0以下のときは 配布数が不正です を返す
  4. 在庫が配布数に満たないときは 0人に配ってN個余ります を返す

入出力例

distribute(10, 3) → "3人に配って1個余ります" distribute(9, 3) → "3人に配って0個余ります" distribute(2, 3) → "0人に配って2個余ります" distribute(10, 0) → "配布数が不正です" distribute(10, -1) → "配布数が不正です"

ヒント

最初に `if per <= 0 {` で弾いてください。ここを書かないと `for stock >= per` が永久に終わりません

ループの中では在庫を減らし、人数を増やします。`stock -= per` と `people++` の2行です

ループを抜けた時点の `stock` が、そのまま余りになります

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

関連レッスン

  • Goのswitch

    breakを書かなくてよいswitchで、商品状態によって表示を分けられるようになります。

  • 定番: FizzBuzz

    判定とループを組み合わせ、Go版のFizzBuzzを自力で書けるようになります。

  • ループで集計

    繰り返しの中で値を累積し、出品価格の合計と平均を計算できるようになります。

  • つくる: 商品集計

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

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

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

  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • 処理計算や代入を表す長方形
  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • 変数データに名前をつけて参照する仕組み
main.go
学習モード
エディタを読み込んでいます

メモ

forの七変化

⌘S で保存