[Go] マップのキーとして構造体を使う

作成日: 2022年01月18日

Go のマップではキーとして構造体を使うことができます。下記の例では key という構造体を定義し、マップ m のキーとして使用しています。

package main

import "fmt"

type key struct {
    a string
    b string
}

func main() {
    m := make(map[key]int)
    m[key{a: "one", b: "two"}] = 1
    fmt.Printf("%#v", m)
}

実行結果は下記のとおりです。

map[main.key]int{main.key{a:"one", b:"two"}:1}

なお、同じフィールドを持つ構造体は順番が異なっていても同一のキーとして扱われるため上書きが行われます。

package main

import "fmt"

type key struct {
    a string
    b string
}

func main() {
    m := make(map[key]int)
    m[key{a: "one", b: "two"}] = 1
    m[key{b: "two", a: "one"}] = 2
    fmt.Printf("%#v", m)
}

実行結果は下記の通りです。

map[main.key]int{main.key{a:"one", b:"two"}:2}
Go