golang で map の key を interface{} にするとリンゴが赤いのとオレンジが赤いのとを区別できる

map の key に interface{} を渡すパターン.

こうしておくと key に型を含められるので,同じ文字列を突っ込んでも区別できます. 型のスコープもあるので,map 自体はをグローバルに公開していても中のデータを局所的に扱えていい感じです.

golang は型を柔軟に付与できるので,臨機応変に型を追加したりしてうまく使っていきたいですね.

下の例は map[interface{}]string ですけど,map[interface{}]interface{} にしておけば何でも放り込んでおけて便利.

https://play.golang.org/p/5hwq5E3do1

package main

import "fmt"

type apple string
type orange string
type zaku string

func main() {
    basket := make(map[interface{}]string)
    basket[apple("red")] = "fuji apple"
    basket[orange("red")] = "red orange"
    basket[zaku("red")] = "シャア,シャア,シャア"

    fmt.Println(basket[apple("red")])   
    fmt.Println(basket[orange("red")])
    fmt.Println(basket[zaku("red")])

}

output:

fuji apple
red orange
シャア,シャア,シャア

赤いものも色々あります.