Go by Example: 맵

Maps는 Go의 내장 연관 데이터 타입(associative data type) 입니다. (다른 언어에선 hashes 또는 dicts라고 부르기도 합니다.)

package main
import "fmt"
func main() {

빈 맵을 생성하기 위해 내장 함수인 make를 사용합니다 : make(map[key-type]val-type)

	m := make(map[string]int)

name[key] = val로 key/value 쌍을 저장합니다.

	m["k1"] = 7
	m["k2"] = 13

맵 출력. Println는 맵의 모든 key/value 쌍들을 출력합니다.

	fmt.Println("map:", m)

name[key]로 키에 해당하는 값을 가져옵니다.

	v1 := m["k1"]
	fmt.Println("v1: ", v1)

len을 맵에 사용하면 key/value 쌍의 갯수를 반환합니다.

	fmt.Println("len:", len(m))

delete 내장 함수는 맵의 key/value 쌍을 삭제합니다.

	delete(m, "k2")
	fmt.Println("map:", m)

맵에서 값을 꺼내오면서 반환되는 선택적인 두번째 반환값은 해당 키가 맵에 존재하는지에 대한 여부를 나타냅니다. 이는 키값이 존재하지 않는건지 또는 해당 값이 0이나 ""과 같은 제로값 인지를 명확하게 구분하는데 사용할 수 있습니다. 값 자체가 필요없는 경우엔, 공백 식별자(blank identifier) _를 사용해 무시할 수 있습니다.

	_, prs := m["k2"]
	fmt.Println("prs:", prs)

또한 한 줄로 맵 선언 및 초기화를 할 수도 있습니다.

	n := map[string]int{"foo": 1, "bar": 2}
	fmt.Println("map:", n)
}

참고로 맵을 fmt.Println으로 출력하면 map[k:v k:v]의 형태로 출력됩니다.

$ go run maps.go
map: map[k1:7 k2:13]
v1:  7
len: 2
map: map[k1:7]
prs: false
map: map[foo:1 bar:2]

다음 예제: Range 문.