KDOC 519: Goのmapではキーの値が同じでも型情報が違えば別のものとして扱われる
この文書のステータス
- 作成
- 2026-02-22 貴島
- レビュー
- 2026-02-25 貴島
概要
型が違えば同じ値であっても違うものとして扱われる。当然にも見えるが、直感的ではない状況に見えることもある。
package main
import "fmt"
type a string
type b string
func main() {
m := map[any]any{}
m[a("k")] = "v"
m[b("k")] = "v"
fmt.Printf("%#v", m)
}
map[interface {}]interface {}{"k":"v", "k":"v"}
出力した表示上は型が表示されていないので、キーがかぶって登録されているように見える。が、型は違うので扱いは異なる。
関連
抽象。
- 表示上は区別できないが、内部では別物として扱われる
関連。
- 補足: KDOC 86: errors.Is()の比較ロジックを見る。何をもって同じとみなすかの問題
- 対比: KDOC 430: エイリアス型に対する型アサーションを見る。見かけと判定の同一性が逆になる例。byte と uint8 のように名前が違っても、エイリアス型は型アサーションで同じ型として扱われる