Go/map
表示
< Go
Goのプログラミング言語におけるmapキーワードは、連想配列(ハッシュマップ)を宣言・操作するために使用されます。以下にmapの全用途を網羅的に説明します。
1. mapの基本概念
[編集]mapはキーと値のペアを格納するデータ構造です。各キーは一意であり、そのキーを使って対応する値にアクセスできます。
2. mapの宣言と初期化
[編集]2.1 宣言のみ
[編集]var m map[string]int // この時点ではmはnil mapであり、使用前に初期化が必要
2.2 make関数による初期化
[編集]m := make(map[string]int) // または var m map[string]int m = make(map[string]int)
2.3 リテラルによる初期化
[編集]m := map[string]int{ "apple": 100, "banana": 200, }
2.4 キャパシティ指定による初期化
[編集]m := make(map[string]int, 100) // 初期キャパシティ100で初期化
3. mapの操作
[編集]3.1 要素の追加・更新
[編集]m["apple"] = 100 // 要素の追加 m["apple"] = 150 // 既存要素の更新
3.2 要素の取得
[編集]value := m["apple"]
3.3 要素の存在確認
[編集]value, exists := m["apple"] if exists { // キーが存在する場合の処理 } else { // キーが存在しない場合の処理 }
3.4 要素の削除
[編集]delete(m, "apple") // "apple"キーとその値を削除
3.5 要素数の取得
[編集]size := len(m)
4. mapの反復処理
[編集]4.1 rangeによる反復
[編集]for key, value := range m { fmt.Println(key, value) }
4.2 キーのみの反復
[編集]for key := range m { fmt.Println(key) }
4.3 値のみの反復
[編集]for _, value := range m { fmt.Println(value) }
5. mapの特殊な使い方
[編集]5.1 mapのコピー
[編集]dest := make(map[string]int) for k, v := range src { dest[k] = v }
5.2 mapをキーとするmap
[編集]m := make(map[string]map[string]int) m["fruits"] = map[string]int{ "apple": 100, "banana": 200, }
5.3 setの代用として使用
[編集]set := make(map[string]bool) set["apple"] = true // 要素の追加 // 存在確認 if set["apple"] { // 要素が存在する } // 要素の削除 delete(set, "apple")
5.4 空のmap値との比較
[編集]var m1 map[string]int // nil map m2 := make(map[string]int) // 空のmap(nilではない) if m1 == nil { // trueになる } if m2 == nil { // falseになる }
6. mapの制約と特性
[編集]6.1 キーの制約
[編集]- キーとして使える型は、比較可能な型(==, != 演算子が使える型)のみ
- 使用可能: 整数型、文字列型、ブール型、配列型、インターフェース型など
- 使用不可: スライス型、マップ型、関数型(これらは比較不能)
6.2 値の型
[編集]- 値は任意の型が使用可能(スライス、別のマップ、構造体など)
6.3 その他の特性
[編集]- mapはリファレンス型(関数に渡すと参照渡しになる)
- 順序が保証されない(反復処理の順序は実行ごとに異なる可能性がある)
- スレッドセーフではない(並行アクセスには同期機構が必要)
7. 並行処理での利用
[編集]7.1 sync.Mapによる並行処理対応
[編集]var m sync.Map m.Store("key", value) // 要素の設定 value, ok := m.Load("key") // 要素の取得 m.Delete("key") // 要素の削除 m.Range(func(key, value interface{}) bool { // 要素の反復処理 return true // 継続する場合はtrue })
以上がGoのmapキーワードの主な用途と使い方です。mapはGoのプログラミングにおいて頻繁に使用される重要なデータ構造で、様々なユースケースで活用できます。