スキップしてメイン コンテンツに移動

Goマップ入門:キーと値

Goマップ入門:キーと値

Go初心者のためのマップ入門

Go言語でデータを効率的に管理するために欠かせない構造体がマップです。マップはキーと値のペアを保持し、検索・挿入・削除が高速に行えるデータ構造です。Go初心者が最初に触れるときは、配列やスライスと同様に「変数宣言」と「初期化」の2段階を意識すると良いでしょう。

mapのキーと値の基本

マップは map[キー型]値型 という構文で宣言します。キーは一意でなければならず、比較可能な型(数値、文字列、ポインタなど)を使用します。値は任意の型を指定でき、同じキーに対しては最新の値が上書きされます。以下は簡単な例です。

var age map[string]int
age = map[string]int{
    "Alice": 30,
    "Bob":   25,
}

この例では、キーが文字列、値が整数のマップを作成しています。キーと値のペアは「キーと値」の関係で保持され、ハッシュマップとして内部的に実装されています。

makeでマップを作る

Goでは make 関数を使ってマップを初期化します。make(map[キー型]値型, capacity) の形で呼び出すと、内部バッファが確保され、パフォーマンスが向上します。容量は初期要素数の目安で、必要に応じて自動で拡張されます。

scores := make(map[string]float64, 10)
scores["math"] = 95.5
scores["science"] = 88.0

このように make を使うことで、nil でないマップを安全に扱えます。nil マップに対して値を代入するとランタイムエラーが発生するため注意が必要です。

deleteと存在確認

マップから要素を削除するには delete 関数を使用します。構文は delete(map, key) です。削除後はキーは存在しなくなります。

delete(scores, "math")

存在確認は、値を取得するときに第二戻り値を使います。value, ok := map[key] の形で、oktrue ならキーが存在し、false なら存在しません。これにより、ゼロ値と存在しないケースを区別できます。

if val, ok := scores["math"]; ok {
    fmt.Println("math score:", val)
} else {
    fmt.Println("math score not found")
}

連想配列とハッシュマップの関係

マップは「連想配列」とも呼ばれ、キーと値を関連付けるデータ構造です。内部的にはハッシュテーブル(ハッシュマップ)を用いて実装されており、平均 O(1) のアクセス時間を実現しています。Goのマップはスレッドセーフではなく、同時に複数のゴルーチンからアクセスする場合は外部で同期を取る必要があります。

データ構造としては、配列やスライスと比べて柔軟性が高く、キーが整数でなくても文字列や構造体を使える点が特徴です。Go初心者がデータを整理する際に、まずはマップを使ってみると、コードの可読性と保守性が向上します。

この記事はAIによって作成されました。

コメント