1. 本が2件
  2. 家電が1件
  3. 無いカテゴリは0件
  4. 全部同じカテゴリ
コース一覧
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

counts := map[string]int{ "本": 3, "家電": 1, } counts["本"] // 3

map[キーの型]値の型 と書きます。上の例は「文字列で引くと整数が返る」入れ物です。

作り方

Go

counts := map[string]int{} // 空で作る counts := make(map[string]int) // 同じ意味 var counts map[string]int // これは危険

3つ目に注意してください。マップのゼロ値は nil で、書き込むと実行時に止まります。

Go

var counts map[string]int counts["本"] = 1 // panic: assignment to entry in nil map

スライスは nil でも append できましたが、マップは違います。使う前に必ず作ってください。

読むだけなら nil でも大丈夫、という中途半端さも混乱のもとです。counts := map[string]int{} と書く癖を付けるのが安全です。

読み書き

Go

counts["本"] = 3 // 書く counts["本"]++ // 増やす len(counts) // 件数 delete(counts, "本") // 消す

counts["本"]++ が便利です。まだ無いキーでも動きます。

Go

counts := map[string]int{} counts["本"]++ // 1 になる

無いキーを読むとゼロ値の 0 が返るので、0 に 1 を足して 1 になります。集計のコードが、キーの有無を確かめずに書けます。

集計の型

Go

counts := map[string]int{} for _, category := range categories { counts[category]++ }

この3行が、カテゴリ別の件数を数える定番の形です。第3章では if を並べて数えていたものが、キーの種類が増えても同じ長さで書けます。

順番は保証されない

Go

for k, v := range counts { fmt.Println(k, v) }

この出力の順番は毎回変わります。Go が意図してばらばらにしています。順番に頼ったコードを書かせないためです。

決まった順で並べたいなら、キーを取り出して並べ替えます。この演習では、順番に頼らない形で答えを組み立ててもらいます。

要件

  1. マップを使ってカテゴリごとの件数を数える
  2. マップは map[string]int{} で作る
  3. カテゴリ名はN件です の形を返す
  4. 1件も無いカテゴリは 0 件として答える

入出力例

countCategory(["本","家電","本"], "本") → "本は2件です" countCategory(["本","家電","本"], "家電") → "家電は1件です" countCategory(["本","家電"], "食品") → "食品は0件です" countCategory(["本","本","本"], "本") → "本は3件です"

ヒント

`for _, c := range categories {` で回します。添字は要らないので `_` にします

`counts[c]++` と書くだけで数えられます。キーがまだ無くてもゼロ値の 0 から始まるので、事前の確認は要りません

無いキーを読むと 0 が返るので、該当なしの場合も特別扱いは要りません

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

関連レッスン

  • カンマokイディオム

    キーの有無を2つ目の戻り値で判定し、無いキーを安全に扱えるようになります。

  • つくる: 検索と集計

    第5章の知識でキーワード検索とカテゴリ集計を同時に行えるようになります。

  • 第5章クイズ

    配列とスライスの違い、append、range、マップ、カンマokについての理解を確認します。

  • 構造体

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

main.go
学習モード
エディタを読み込んでいます

メモ

マップ

⌘S で保存