예제 코드를 찾아서 복사하다가 갑지기 panic 컴파일 오류를 만날 수 있다. 

panic: assignment to entry in nil map



package main


import "fmt"


func main() {

var m map[string]int

m["a"] = 1

m["b"] = 2


for i, j := range m {

fmt.Printf("%s %d\n", i, j)

}

}



그 이유는 map을 초기화하지 않은 상태(nil)에서 값을 할당(assignment)하다가  발생한 것이다. 



panic: assignment to entry in nil map


goroutine 1 [running]:

main.main()

/mydev/go/src/test/test.go:8 +0x76


goroutine 2 [runnable]:

runtime.forcegchelper()

/usr/local/go/src/runtime/proc.go:90

runtime.goexit()

/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1


goroutine 3 [runnable]:

runtime.bgsweep()

/usr/local/go/src/runtime/mgc0.go:82

runtime.goexit()

/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1


goroutine 4 [runnable]:

runtime.runfinq()

/usr/local/go/src/runtime/malloc.go:712

runtime.goexit()

/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1

exit status 2

[Finished in 0.146s]




이럴 때는 map을 초기화해야 한다. 

package main


import "fmt"


func main() {

var m map[string]int

m = map[string]int{}

m["a"] = 1

m["b"] = 2


for i, j := range m {

fmt.Printf("%s %d\n", i, j)

}

}




문제 해결된다. 

Posted by '김용환'
,