Go言語のマップ(map)の基本!定義・初期化・要素追加方法
生徒
「先生、Go言語で『マップ』って何ですか?聞いたことがない用語で難しそうです…」
先生
「マップは簡単に言うと『鍵と値をセットで管理する箱』のようなものです。例えば、住所録や辞書のイメージですね。」
生徒
「鍵と値ですか?どういうことですか?」
先生
「鍵(key)を使って値(value)を取り出せるデータの集まりです。住所録なら名前が鍵、住所が値になります。Go言語のマップはそれを簡単に扱えるデータ構造です。」
生徒
「なるほど!具体的にどうやって作って使うんですか?」
先生
「では、基本の定義・初期化と要素の追加方法を一緒に見ていきましょう!」
1. マップ(map)とは?
Go言語のマップは、ひとことで言うと「名前で探せる引き出し」のような仕組みです。同じ箱にたくさんのデータを入れるのではなく、ひとつずつに名前(キー)を付けておくことで、あとから必要な情報だけをすぐ取り出せます。たとえば、友だちの電話帳なら「名前」がキー、「電話番号」が値になります。キーを指定すれば対応する値が返ってくるので、どれだけデータが増えても効率よく管理できます。
キーと値の組み合わせは、文字列・数値のような単純な情報だけでなく、ほかの型や構造体など少し複雑なデータにも使えます。最低限の書き方を覚えてしまえば、商品の在庫や社員情報など、実務的なプログラムでも活躍します。
// 簡単なマップの例
words := map[string]string{
"apple": "りんご",
"banana": "バナナ",
}
// 「apple」を指定すると「りんご」が取り出せる
fmt.Println(words["apple"])
このように、マップは「名前で情報をすばやく取り出す」ための基本機能です。まずは仕組みを短いサンプルで見ることで、全体のイメージがつかみやすくなります。
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. マップを一行で作る方法
「いますぐ使える空のマップを用意したい」「短く書いて読みやすくしたい」という場面では、定義と初期化を一行でまとめる書き方が便利です。次のように書けば、その瞬間から要素を追加できます。
myMap := make(map[string]int)
:=は「新しい変数を作って代入」までを同時に行う省略記法です。関数の中でサッと用意したいときに向いています。最初から値を入れておきたいなら、リテラルを使って一行で定義することもできます。
scores := map[string]int{"Alice": 90, "Bob": 75}
この例では、キーが文字列、値が整数のマップを一度に作成し、初期データも同時に登録しています。空で作るか、初期値つきで作るかは用途に合わせて選びましょう。短く読みやすいコードは、保守やレビューの効率も上げてくれます。
4. マップへの要素追加方法
マップに値を追加したいときは、キーを指定して値を代入します。例えば:
myMap["apple"] = 100
myMap["banana"] = 200
ここでは、「apple」というキーに100を、「banana」というキーに200を割り当てています。あとでキーを指定して値を取り出せます。
5. マップの値を取り出す方法
マップから値を取得するには、キーを指定します。例えば:
price := myMap["apple"]
fmt.Println(price) // 100 と表示される
もし指定したキーがマップにない場合は、その型のゼロ値が返ります。整数なら0、文字列なら空文字("")です。
6. マップのキーの存在確認
キーがマップにあるかどうか調べたい場合は、次のように書きます。
price, ok := myMap["orange"]
if ok {
fmt.Println("値は", price)
} else {
fmt.Println("キーは存在しません")
}
ここでokはキーが存在すればtrue、なければfalseになります。
7. マップの初期値を指定して作る方法
マップを作るときに、最初からいくつかの値を入れておきたい場合は、次のように書けます。
myMap := map[string]int{
"apple": 100,
"banana": 200,
}
この方法なら、すぐに値を使えます。
8. マップの使いどころのイメージ
マップは「名前と電話番号」「商品名と値段」「社員番号と社員情報」など、何かを「キー」で指定して「値」を取り出したいときに役立ちます。
たとえば、お店のレジシステムで「商品名から値段を調べる」場合、マップを使うと簡単にできます。
9. 注意点:マップは順序を保証しない
マップはキーと値のセットですが、データを追加した順番で取り出せるとは限りません。順番が必要な場合は、別の方法を使う必要があります。
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言語のマップは配列やスライスと違い、数字の順番で管理されるデータではありません。スライスは「0番」「1番」という順序で並びますが、マップは順序を持たず「キー」と呼ばれる名前で値を取り出します。例えば「apple」という文字列をキーにして値段の100を取り出すような仕組みです。この違いを理解すると、Go言語で効率的なデータ管理ができるようになります。検索が速く、名前で値を引ける点が大きなメリットです。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!