カテゴリ: Go言語 更新日: 2026/09/09

Go言語のマップ(map)の基本!定義・初期化・要素追加方法

Go言語のマップ(map)の基本!定義・初期化・要素追加方法
Go言語のマップ(map)の基本!定義・初期化・要素追加方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Go言語で『マップ』って何ですか?聞いたことがない用語で難しそうです…」

先生

「マップは簡単に言うと『鍵と値をセットで管理する箱』のようなものです。例えば、住所録や辞書のイメージですね。」

生徒

「鍵と値ですか?どういうことですか?」

先生

「鍵(key)を使って値(value)を取り出せるデータの集まりです。住所録なら名前が鍵、住所が値になります。Go言語のマップはそれを簡単に扱えるデータ構造です。」

生徒

「なるほど!具体的にどうやって作って使うんですか?」

先生

「では、基本の定義・初期化と要素の追加方法を一緒に見ていきましょう!」

1. マップ(map)とは?

1. マップ(map)とは?
1. マップ(map)とは?

Go言語のマップは、ひとことで言うと「名前で探せる引き出し」のような仕組みです。同じ箱にたくさんのデータを入れるのではなく、ひとつずつに名前(キー)を付けておくことで、あとから必要な情報だけをすぐ取り出せます。たとえば、友だちの電話帳なら「名前」がキー、「電話番号」が値になります。キーを指定すれば対応する値が返ってくるので、どれだけデータが増えても効率よく管理できます。

キーと値の組み合わせは、文字列・数値のような単純な情報だけでなく、ほかの型や構造体など少し複雑なデータにも使えます。最低限の書き方を覚えてしまえば、商品の在庫や社員情報など、実務的なプログラムでも活躍します。


// 簡単なマップの例
words := map[string]string{
    "apple":  "りんご",
    "banana": "バナナ",
}
// 「apple」を指定すると「りんご」が取り出せる
fmt.Println(words["apple"])

このように、マップは「名前で情報をすばやく取り出す」ための基本機能です。まずは仕組みを短いサンプルで見ることで、全体のイメージがつかみやすくなります。

2. マップの定義と初期化の基本

2. マップの定義と初期化の基本
2. マップの定義と初期化の基本

マップを使うときは、「どんなキーと値を扱うか」を最初に決めます。これは、引き出しのラベルと中身の種類を決めるイメージです。Go言語では、次のように書くと「キーが文字列、値が整数を入れるマップ」を用意できます。


var myMap map[string]int

ただし、この書き方だけでは「マップを使う準備をしただけ」で、まだ中身を入れられません。本当に引き出しを作るには、make関数で初期化が必要です。


myMap = make(map[string]int)

makeを使うことで、値を入れたり取り出したりできる状態になります。これで準備完了です。

たとえば、次のように書くと「商品名と値段を入れられるマップ」を作れます。


var priceList map[string]int
priceList = make(map[string]int)

この時点ではまだ空ですが、引き出し自体は完成しています。中身を追加するかどうかは、次のステップで自由に決められます。「定義」と「初期化」を分けて書けるのが、Go言語のマップの基本的な特徴です。

3. マップを一行で作る方法

3. マップを一行で作る方法
3. マップを一行で作る方法

「いますぐ使える空のマップを用意したい」「短く書いて読みやすくしたい」という場面では、定義と初期化を一行でまとめる書き方が便利です。次のように書けば、その瞬間から要素を追加できます。


myMap := make(map[string]int)

:=は「新しい変数を作って代入」までを同時に行う省略記法です。関数の中でサッと用意したいときに向いています。最初から値を入れておきたいなら、リテラルを使って一行で定義することもできます。


scores := map[string]int{"Alice": 90, "Bob": 75}

この例では、キーが文字列、値が整数のマップを一度に作成し、初期データも同時に登録しています。空で作るか、初期値つきで作るかは用途に合わせて選びましょう。短く読みやすいコードは、保守やレビューの効率も上げてくれます。

4. マップへの要素追加方法

4. マップへの要素追加方法
4. マップへの要素追加方法

マップに値を追加するときは、キーを指定して代入するだけです。直感的に書けるので、配列やスライスよりも「名前で管理したいデータ」に向いています。まずは基本の追加から見てみましょう。


myMap["apple"]  = 100   // 新規追加(キー "apple" に 100 をセット)
myMap["banana"] = 200   // 新規追加(キー "banana" に 200 をセット)

ポイントは、同じキーに代入すると上書きになることです。新規か上書きかを特別に区別する文法はありません。次の例では「apple」の値が更新されます。


myMap["apple"] = 120    // 既存の "apple" を 120 に上書き

数値をカウントアップしたい場面では、取り出してから足し込む書き方がわかりやすいです(存在しないキーは数値型なら 0 から始まるため、そのまま加算できます)。


myMap["orange"] = myMap["orange"] + 1  // 初回は 0+1 で 1、以降は 2,3... と増える
// 省略形
myMap["orange"]++

「キーがあるかを確かめてから追加・更新したい」場合は、存在確認と組み合わせると安全です(ここでは追加の流れに集中するため要点だけ)。


if _, ok := myMap["grape"]; !ok {
    myMap["grape"] = 180  // なければ追加
}

文字列やブールなど、値の型が違っても追加方法は同じです。例として、在庫の有無を管理するマップも同様に扱えます。


stock := make(map[string]bool)
stock["milk"]  = true   // 在庫あり
stock["water"] = false  // 在庫なし

このように、Go言語のmap(マップ)への要素追加は「マップ[キー] = 値」の形で一貫しています。新規追加・上書き・増分更新まで同じ書き方で表現できるため、商品名と価格、ユーザー名とフラグなど、さまざまなデータ管理に応用できます。

5. マップの値を取り出す方法

5. マップの値を取り出す方法
5. マップの値を取り出す方法

マップから値を参照(取得)する基本は「マップ[キー]」です。配列やスライスの番号指定と似ていますが、こちらは番号ではなくキーで探します。実務でも「商品名」や「ユーザーID」から素早く情報を取り出す場面でよく使われます。


price := myMap["apple"]   // キー "apple" に対応する値を取り出す
fmt.Println(price)        // 例: 100 と表示される

もし指定したキーが存在しない場合、Go言語のマップはエラーではなくゼロ値を返します。数値型なら 0、文字列なら空文字 ""、真偽値なら false です。つまり「見つからなかった=0(または空)」という形になるため、そのまま計算や表示に使うと意図しない結果に見えることがあります。


fmt.Println(myMap["orange"]) // orange が無い場合、0 が表示される(数値のゼロ値)
names := map[string]string{"id001": "Taro"}
fmt.Println(names["id999"])  // ""(空文字)が表示される(文字列のゼロ値)

この性質を知っておくと、ログ出力や条件分岐の作り方が安定します。たとえば「無いときはメッセージを出す」「0は特別扱いにする」といった工夫が可能です。なお、キーの存在確認をきちんと判定したいときの書き方は、次のセクションで紹介します。ここではまず「キーで取り出す」「無ければゼロ値」が基本、と覚えておきましょう。

6. マップのキーの存在確認

6. マップのキーの存在確認
6. マップのキーの存在確認

キーがマップにあるかどうか調べたい場合は、次のように書きます。


price, ok := myMap["orange"]
if ok {
    fmt.Println("値は", price)
} else {
    fmt.Println("キーは存在しません")
}

ここでokはキーが存在すればtrue、なければfalseになります。

7. マップの初期値を指定して作る方法

7. マップの初期値を指定して作る方法
7. マップの初期値を指定して作る方法

マップを作るときに、最初からいくつかの値を入れておきたい場合は、次のように書けます。


myMap := map[string]int{
    "apple":  100,
    "banana": 200,
}

この方法なら、すぐに値を使えます。

8. マップの使いどころのイメージ

8. マップの使いどころのイメージ
8. マップの使いどころのイメージ

マップは「名前と電話番号」「商品名と値段」「社員番号と社員情報」など、何かを「キー」で指定して「値」を取り出したいときに役立ちます。

たとえば、お店のレジシステムで「商品名から値段を調べる」場合、マップを使うと簡単にできます。

9. 注意点:マップは順序を保証しない

9. 注意点:マップは順序を保証しない
9. 注意点:マップは順序を保証しない

マップはキーと値のセットですが、データを追加した順番で取り出せるとは限りません。順番が必要な場合は、別の方法を使う必要があります。

10. マップの要素削除方法

10. マップの要素削除方法
10. マップの要素削除方法

マップから要素を削除したいときは、delete関数を使います。


delete(myMap, "apple")  // "apple"というキーの要素を削除

削除した後、そのキーは存在しなくなります。

まとめ

まとめ
まとめ

ここまで、Go言語のマップについて丁寧に学んできました。マップはひとことで言うと「名前で値を管理できる箱」のような仕組みで、プログラムの中で情報を効率よく扱うためにとても便利な存在です。ふつうの配列やスライスでは番号で情報を探しますが、マップなら「名前」や「商品名」など、覚えやすい文字列を使って値を取り出せます。この考え方は日常の感覚に近く、初心者でも感覚的に理解しやすい特徴があります。特に、商品名と価格、ユーザー名と住所、社員番号と社員情報など、何かを検索して値を得たい場面ではとても強力です。

マップでは、まず「型」を決めることから始まります。キーが文字列ならstring、値が整数ならintと決めて定義します。定義しただけではまだ使えないので、make関数で初期化してマップの箱を準備します。この流れはとても大切で、ふだんのプログラミングでもよく登場する書き方です。また、定義と初期化を一行で書ける省略記法もあり、素早くマップを使いたい場合に役立ちます。短いコードで明確に意図を表せる書き方は、初心者だけでなく経験者にとっても読みやすい形です。

マップへの値の追加は、キーを指定して値を代入するだけです。これは感覚的に理解しやすく、日常会話に近い形で表現できます。「リンゴの値段は〇〇円」「商品Aは〇〇」といったイメージで、プログラムにも自然な書き方になります。そして、すでに存在するキーに新しい値を入れると上書きになります。特別な記号を使う必要はなく、単純に代入するだけなので混乱しづらいのもメリットです。

値を取り出す方法は、マップ[キー]の形で書きます。配列と似ていますが、番号ではなく名前で検索する点が大きな違いです。初心者にとって、この書き方はとても分かりやすく、実際のプログラムでもよく使われます。また、キーが存在しない場合には、対応する型のゼロ値が返ります。整数なら0、文字列なら空文字、真偽値ならfalseです。この「エラーにならずにゼロ値が返る」動作は便利ですが、意図せず値が空になっているように見えてしまう場面もあるため、存在確認と組み合わせるとより安全に扱えます。

存在確認は、値と同時にokという変数を受け取ることで実現できます。これは、プログラムが思い通りに動いているかをはっきり判断できる方法で、実務でもよく使われる書き方です。たとえば、会員情報を探すときに「その人が登録されているか」を知りたい場面で役立ちます。見つかった場合と見つからない場合で処理を分けられるため、誤った動作や想定外の不具合を防ぎやすくなります。

さらに、最初から値を入れた状態でマップを作る方法も学びました。設定ファイル、初期データ、テスト用データなど、あらかじめ準備しておきたいデータをまとめて表現できます。コードが短くなるだけでなく、読み手にも意図がはっきり伝わります。「このマップには最初からこの値が入っています」と明確に記述できるため、後から確認する人にも優しい書き方です。プログラムを読みやすく、修正しやすくすることは、実務でとても大切です。

マップは便利ですが、ひとつだけ注意点がありました。それは、追加した順番がそのまま保たれるとは限らないことです。マップは内部で検索しやすいようにデータを管理するため、表示するたびに順番が変わることがあります。順番に意味がある場合は、別の仕組みを使ったりソートしたりする必要があります。ただ、検索や管理が目的であれば問題にならず、多くの場面で役立ちます。「名前で値を取り出す」ための仕組みとして、マップは非常に優れています。

そして最後に、マップから要素を削除する方法としてdelete関数を学びました。不要なデータを片付けたり、間違って登録した値を消したりするときに使えます。削除したあとは、そのキーは存在しなくなるため、取り出してもゼロ値になります。削除前後で状態を比べたいときは、存在確認と組み合わせると安全です。システム開発では、データを追加するだけでなく、きちんと削除して整理することも大切なので、覚えておくと役に立ちます。

簡単なサンプルで振り返り


package main
import "fmt"

func main() {
    prices := map[string]int{
        "apple":  120,
        "banana": 200,
        "milk":   150,
    }

    fmt.Println(prices["apple"])

    prices["apple"] = 130

    price, ok := prices["orange"]
    if ok {
        fmt.Println(price)
    } else {
        fmt.Println("見つかりません")
    }

    delete(prices, "banana")
    fmt.Println(prices["banana"])
}

この短いサンプルだけでも、マップの定義、初期値、上書き、存在確認、削除までの流れがすべて体験できます。初心者でも、ひとつずつ動作を追いながら実行すれば、マップの働きが直感的に理解できるはずです。身近なデータをマップで表現すると、プログラムの考え方がぐっと分かりやすくなります。名前と情報を結びつける仕組みは、日常でもよく使う考え方です。電話帳、商品データ、会員名簿、成績表など、あらゆる場面で活用できるため、実務にも応用しやすい知識になります。

先生と生徒の振り返り会話

生徒

「マップって、ふつうの配列より使いやすい場面が多いんですね。名前で値を取り出せるのが、こんなに便利だとは思いませんでした。」

先生

「そうなんです。配列は番号でアクセスしますが、マップは名前で検索できます。たとえば『商品名から値段を取り出す』など、実際のアプリやシステムに近い書き方ができます。」

生徒

「削除するときにdeleteを使うのも分かりやすかったです。存在確認の書き方も便利ですね。」

先生

「存在確認は特に大切です。実務では、データがあるかどうかで処理を変えることが多いので、安心して使える書き方になります。」

生徒

「マップって難しいのかと思っていましたが、やってみるとシンプルで使いやすいですね。」

先生

「その通りです。実際に手を動かして試していくと、もっと理解が深まりますよ。ぜひ、身近なデータでマップを作ってみてください。」

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Go言語のマップは配列やスライスと何が違うのでしょうか?仕組みが似ている気がして混乱しています。

Go言語のマップは配列やスライスと違い、数字の順番で管理されるデータではありません。スライスは「0番」「1番」という順序で並びますが、マップは順序を持たず「キー」と呼ばれる名前で値を取り出します。例えば「apple」という文字列をキーにして値段の100を取り出すような仕組みです。この違いを理解すると、Go言語で効率的なデータ管理ができるようになります。検索が速く、名前で値を引ける点が大きなメリットです。

Go言語でマップを定義しただけでは使えないと聞きました。なぜ初期化しないと動かないのですか?

Go言語でマップを定義しただけでは、まだ「箱が空のまま」という状態で、値を入れる準備ができていません。そのため、make関数やリテラルで初期化する必要があります。初期化することで「このマップは値を入れて良い状態だよ」という許可が与えられます。初心者のうちは「mapは定義後に必ず初期化」と覚えると安心です。

マップのキーには文字列以外も使えるのですか?数字や真偽値を使いたいときはどうなりますか?

Go言語のマップは文字列だけでなく、整数や真偽値などさまざまな型をキーとして使えます。例えば商品番号を整数で管理したり、フラグを使って状態を表したりできます。文字列以外が使えることで、柔軟なデータ構造を作りやすくなるのがマップの魅力です。初心者でも使いやすく、Go言語でよく利用されるデータ構造のひとつです。
関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

関連記事:
カテゴリの一覧へ
新着記事
New1
Swift
Swiftの可変長引数(Variadic Parameters)とは?初心者向けにやさしく解説!
New2
Go言語
Go言語の配列の基本!定義・初期化・アクセス方法をやさしく解説
New3
Swift
Swift変数と定数の使い方|varとletの違いを初心者向けに解説
New4
Swift
Swift正規表現入門!Regex BuilderとNSRegularExpressionを初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Swift
Swift入門ガイド|基本構文と書き方をマスターしよう
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Go言語
Go言語のビルドの基本!go buildコマンドの使い方を初心者向けに解説
No.7
Java&Spring記事人気No7
Kotlin
Kotlinの可視性修飾子を完全ガイド!public・private・internalの意味と使い分けを初心者向けに解説
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptで絶対値を求める方法!Math.absの使い方を初心者向けにわかりやすく解説

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク