GO · 컬렉션
맵 — map[K]V
Go의 해시맵. 키-값 저장소로 동시성에서는 주의가 필요합니다.
컬렉션입문mapmakedeletecomma-ok해시맵
핵심 설명
Go의 해시맵. 키-값 저장소로 동시성에서는 주의가 필요합니다.
Go code
package main
import (
"fmt"
"sort"
)
func main() {
// 맵 생성
m1 := map[string]int{
"apple": 5,
"banana": 3,
"cherry": 8,
}
m2 := make(map[string]int) // 빈 맵
m2["key"] = 100
// 읽기 & 존재 확인 (comma-ok 패턴)
val, ok := m1["apple"]
if ok {
fmt.Println("apple:", val)
}
val2 := m1["durian"] // 없으면 zero value (0)
fmt.Println("durian:", val2)
// 삭제
delete(m1, "banana")
// 순회 (순서 보장 안 됨)
keys := make([]string, 0, len(m1))
for k := range m1 { keys = append(keys, k) }
sort.Strings(keys) // 정렬
for _, k := range keys {
fmt.Printf("%s: %d
", k, m1[k])
}
// 중첩 맵
graph := map[string][]string{
"A": {"B", "C"},
"B": {"D"},
"C": {"D", "E"},
}
fmt.Println(graph["A"])
// 빈도 카운팅 패턴
words := []string{"go", "is", "great", "go", "is"}
freq := make(map[string]int)
for _, w := range words { freq[w]++ }
fmt.Println(freq)
// 구조체를 값으로
type Point struct{ X, Y int }
points := map[string]Point{
"origin": {0, 0},
"unit": {1, 1},
}
fmt.Println(points["unit"])
}학습 팁
맵에 nil 맵에 쓰기(var m map[string]int; m["key"] = 1)는 런타임 패닉입니다. 항상 make()나 리터럴로 초기화하세요.
주의할 점
맵은 동시 읽기는 안전하지만 동시 쓰기는 race condition입니다. 고루틴에서 맵을 공유하려면 sync.RWMutex나 sync.Map을 사용하세요.
자주 묻는 질문
맵 — map[K]V란 무엇인가요?
Go의 해시맵. 키-값 저장소로 동시성에서는 주의가 필요합니다.
맵 — map[K]V 학습 시 주의할 점은 무엇인가요?
맵은 동시 읽기는 안전하지만 동시 쓰기는 race condition입니다. 고루틴에서 맵을 공유하려면 sync.RWMutex 나 sync.Map 을 사용하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.