map は Go の組み込みハッシュテーブルで、キーと値のペア の無順序コレクションであり、平均 O(1) のルックアップを実現します。キーを値に関連付ける標準的な方法です。
マップの作成と使用
go
ages := ([])
ages[] =
age := ages[]
scores := []{
: ,
: ,
}
(scores, )
(scores)
// ⚠️ a missing key returns the ZERO VALUE, not an error
value := scores["missing"] // 0 — but was it stored as 0, or absent? Ambiguous!
// ✅ the comma-ok form tells you if the key EXISTS
value, ok := scores["missing"]
if ok {
fmt.Println("found:", value)
} else {
fmt.Println("not present") // key doesn't exist
}
これは必須です: 欠落キーにアクセスすると、値型のゼロ値 (0、""、nil) が返されるため、値だけからは "キー欠落" と "キー存在(ゼロ値付き)" を 区別できません — , ok ブール値が曖昧性を解消します。
for key, value := range scores {
fmt.Println(key, value)
}
// ⚠️ iteration order is RANDOMIZED — never rely on map order!
// To iterate in order: collect keys into a slice, sort it, then iterate.
Go は意図的にマップのイテレーション順序をランダム化します(コードがそれに依存するのを防ぐため)— 順序付きイテレーションが必要な場合は、自分でキーをソートしてください。
var m map[string]int // nil map (declared but not initialized)
v := m["x"] // ✅ reading is OK → 0
m["x"] = 1 // 💥 PANIC: assignment to entry in nil map
// must initialize first: m = make(map[string]int)
nil マップは読み取り可能ですが、書き込みでパニック します — 保存する前に make() する(またはリテラルを使用する)必要があります。
Valid keys: comparable types (string, int, bool, structs of comparable fields, pointers)
Invalid keys: slices, maps, functions (not comparable) → compile error
マップは Go の基本的で絶えず使用されるデータ構造で、キーと値の関連付けと高速ルックアップ(キャッシュ、インデックス、カウント、グループ化)に使用されます。
いくつかの動作は知ることが不可欠で、一般的なバグの原因です: コンマ-OK イディオム(キーの存在を確認する唯一の確実な方法。欠落キーはゼロ値を返すため)、ランダム化されたイテレーション順序(決して依存しないでください — 順序付き出力のためキーをソートしてください)、および nil マップ書き込みパニック(常に書き込み前に初期化してください)。
これら — およびキーが比較可能な型である必要があるという事実を理解することは、毎日の正しい Go に必要であり、堅い Go 開発者を区別する実用的な詳細の種類を反映し、面接に頻繁に現れます。