読者です 読者をやめる 読者になる 読者になる

DRYな備忘録

Don't Repeat Yourself.

【Go言語】assignment to entry in nil map

go

問題

以下のエラーが出た

panic: runtime error: assignment to entry in nil map

調査

Go言語では、ほとんどの型は宣言時に初期化される。

package main

import "fmt"

type A struct {
    Foo []float64
    Bar bool
}

func main() {
    var i int
    fmt.Printf("%+v\n", i)
 
    var s string
    fmt.Printf("%+v\n", s)
 
    var a A
    fmt.Printf("%+v\n", a)
}

結果

0

{Foo:[] Bar:false}

しかし、mapだけは宣言時に初期化されない?

package main

import "fmt"

func main() {
    var m map[string]string
    fmt.Println(m)// map[]

    /* panic: runtime error: assignment to entry in nil map
   m["hoge"] = "fuga"
   fmt.Println(m)
   */
 
    // 初期化すればOK
    m = map[string]string{}
    fmt.Println(m)// map[]
 
    m["hoge"] = "fuga"
    fmt.Println(m)// map[hoge:fuga]
}

解決

  • mapはちゃんと自分で初期化するべし

追記

勉強いたしますmm

DRY