golang mapチートシート

パターン 定義 len Read Write
nil map var nilMap map[string]int 0 できる panic
empty map literal emptyMapLiteral := map[string]int{} 0 できる できる
nonempty map literal teams := map[string][]string{"Orcas": {"Fred", "Ralph", "Bijou"},"Lions": {"Fred", "Ralph", "Bijou"},"Kittens": {"Fred", "Ralph", "Bijou"},} n できる できる

1. nil map

定義

var nilMap map[string]int

len

fmt.Printf("[nilMap] len: %v\n", len(nilMap))
//[nilMap] len: 0

読み取り

できる。値のzero valueを返す。この例だとintのzero value

fmt.Printf("[nilMap] read : %v\n", nilMap["apple"])
//[nilMap] read: 0

書き込み

panic起きる

nilMap["apple"] = 10
//panic: assignment to entry in nil map

2. empty map literal — non nil

定義

emptyMapLiteral := map[string]int{}

len

fmt.Printf("[emptyMapLiteral] len: %v\n", len(emptyMapLiteral))
//[emptyMapLiteral] len: 0

読み取り

できる。値のzero valueを返す。この例だとintのzero value

fmt.Printf("[emptyMapLiteral] read: %v\n", emptyMapLiteral["apple"])
//[emptyMapLiteral] read: 0

書き込み

emptyMapLiteral["apple"] = 10
fmt.Printf("[emptyMapLiteral] read: %v\n", emptyMapLiteral["apple"])
//[emptyMapLiteral] read: 10

3. nonempty map literal — non nil

定義

teams := map[string][]string{
        "Orcas":   {"Fred", "Ralph", "Bijou"},
        "Lions":   {"Fred", "Ralph", "Bijou"},
        "Kittens": {"Fred", "Ralph", "Bijou"},
    }

len

fmt.Printf("[teams] len: %v\n", len(teams))
//[teams] len: 3

読み取り

fmt.Printf("[teams] read: %v\n", teams["Orcas"])
//[teams] read: [Fred Ralph Bijou]

書き込み

teams["Lakers"] = []string{"A", "B", "C"}
//[teams] read: [A B C]