1. 3件のとき
  2. 1件のとき
  3. 2件のとき
コース一覧
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しかない世界

ループは1種類だけ

他の言語には、繰り返しの書き方がいくつもあります。

プレーンテキスト

for / while / do-while / foreach / repeat-until

Go にあるのは for だけです。while も do-while もありません。

減らしたのは、書き方が増えるほど「どれを使うべきか」で迷い、読む人も切り替えが要るからです。1つに絞れば、繰り返しを見たときに必ず for を探せば済みます。

基本の形

Go

for i := 0; i < 3; i++ { fmt.Println(i) }

セミコロンで区切られた3つの部分があります。

プレーンテキスト

i := 0 最初に1回だけ実行する i < 3 毎回ここを見て、真なら続ける i++ 1周が終わるたびに実行する

動く順番はこうなります。

プレーンテキスト

i := 0 → 条件を見る → 中身 → i++ → 条件を見る → 中身 → i++ → ...

条件が偽になった時点で、中身を実行せずに抜けます。

i++ は文であって式ではない

細かいところですが、Go の i++ は値を持ちません。

Go

j := i++ // エラー fmt.Println(i++) // エラー

他の言語では i++ が値を返すため、a[i++] のような書き方ができます。短く書ける一方で、増える前の値なのか後の値なのかが読み取りにくくなります。Go はその書き方をできなくしています。

-- も同じです。そして ++i という前置きの形はありません。

商品を順に処理する

Go

prices := []int{1200, 24800, 999} for i := 0; i < len(prices); i++ { fmt.Println(prices[i]) }

len() は長さを返す組み込みの関数です。並びの最後まで回すときによく出てきます。

添字は 0 から始まるので、条件は i < len(...) です。i <= len(...) と書くと最後に1回はみ出して、実行時に止まります。

プレーンテキスト

panic: runtime error: index out of range [3] with length 3

panic は、実行中に続けられなくなったときに Go が出すものです。第5章の range を使うと、この間違いごと避けられます。

要件

  1. 番号は1から始める
  2. N. 商品名 の形で1行ずつ並べる
  3. 行の区切りは \n。最後に余分な改行を付けない
  4. 商品が1件も無いときは空文字を返す

入出力例

numberedList(["きのこ図鑑","中古スマホ","古い辞書"]) → "1. きのこ図鑑 2. 中古スマホ 3. 古い辞書" numberedList(["きのこ図鑑"]) → "1. きのこ図鑑" numberedList(["A","B"]) → "1. A 2. B"

ヒント

添字の `i` は 0 から始まるので、表示する番号は `i+1` になります

最後に余分な改行を付けないコツは、行の後ろではなく**前**に改行を足すことです。`if i > 0 { result += "\n" }` と書けます

文字列は `+=` で足していけます。`result := ""` から始めてください

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

関連レッスン

  • forの七変化

    条件だけのfor、無限ループとbreakを書き分け、whileの代わりを作れるようになります。

  • Goのswitch

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

  • 定番: FizzBuzz

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

  • ループで集計

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

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

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

  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • 処理計算や代入を表す長方形
  • 関数処理に名前を付けて再利用できる単位
main.go
学習モード
エディタを読み込んでいます

メモ

forしかない世界

⌘S で保存