9. 맵 (Maps)
:맵은 값에 키를 지정한다. 맵은 반드시 사용하기 전에 make 를 명시해야한다. (주의: new 가 아님.) make 를 수행하지 않은 nil 에는 값을 할당할 수 없다.
type Vertex struct {
Lat, Long float64
}
var m map[string]Vertex
func main() {
m = make(map[string]Vertex)
m["Bell Labs"] = Vertex{
40.68433, -74.39967,
}
fmt.Println(m["Bell Labs"])
}
9.1. 맵 리터널 (Map literals)
: 맵 리터럴은 구조체 리터럴과 비슷하지만 key 를 반드시 지정해야 한다.
type Vertex struct {
Lat, Long float64
}
var m = map[string]Vertex{
"Bell Labs": Vertex{
40.68433, -74.39967,
},
"Google": Vertex{
37.42202, -122.08408,
},
}
func main() {
fmt.Println(m)
}
9.1.1 맵 리터널 값입력시 자료형 생략 가능
type Vertex struct {
Lat, Long float64
}
var m = map[string]Vertex{
"Bell Labs": {
40.68433, -74.39967,
},
"Google": {
37.42202, -122.08408,
},
}
func main() {
fmt.Println(m)
}
9.2 맵 다루기 (Mutating Maps)
- 맵 삽입 및 수정
m[key] = elem
- 요소 가져오기
elem = m[key]
- 요소 지우기
delete(m, key)
- 키의 존재 여부 확인하기 : 키(요소 전체)가 존재 하지 않는다고 해서, nil이 리턴되지 않는다. zero value가 리턴된다. ( int 의 경우 0이, string의 경우 ""[공백]이 리턴된다.)
위의 ok 의 값은 m 에 key 가 존재한다면 true 존재하지 않으면 false , elem 은 타입에 따라 0(zero value) 가 된다. 이처럼 map 을 읽을 때, 존재하지 않는 key 의 반환 값은 타입에 맞는 zero value 이다.elem, ok = m[key]