Categories
GO언어 프로그래밍

Golang ~ assignment to entry in nil map 오류 해결하기

Go언어로 작업하다보면 아래와 같은 오류를 만날 때가 있습니다.

...
[10:08:58][TSERVER] : echo: http: panic serving 127.0.0.1:49402: assignment to entry in nil map
...

assignment to entry in nil map 이란 즉 nil 맵에 값을 배치하려한다는 오류입니다. 한마디로 초기화되지 않은 맵에다가 값을 넣으려고 하니 오류가 나는 거죠.

보통 Go언어에서 struct 를 만들어 쓸때 값을 바로 넣으면서 생성해 사용하는 경우가 많은데요. 이 때 생략하는 멤버중에 맵인 멤버가 있다면 이런 오류가 날 확률이 높습니다. 나중에 초기화 한줄 알고 맵인 멤버를 사용하게 되면 위의 오류가 발생합니다.

아무튼 아래와 같이 몇가지 방식으로 맵은 생성하는 작업을 해줘야 합니다.

1. make() 함수를 사용해 초기화

var m1 map[int]string
// 이상태에서는 m1 은 nil map 입니다.
m1 = make(map[int]string)
// 정상적으로 초기화 되었으므로 사용할 수 있습니다.

2. 리터럴(literal)을 사용해 초기화

m2 := map[int]string{
  1 : "literal"
  2 : "is easy"
}
// 바로 값이 들어간 맵을 만들 수 있습니다.
// 물론 아래와 같이 빈값으로 하면 사용할 수 있는 빈맵을 생성합니다.
m3 := map[int]string{}

보통은 생성자 메소드를 만들어서 struct 를 생성할때 맵을 초기화해주면 오류가 발생할 확률이 많이 줄어듭니다. 아무래도 Go언어의 맵은 PHP 의 맵과는 달리 조금 신경쓸게 더 많네요. ^^;