Go에서 딕셔너리 이해하기: `map` 데이터 구조
Grace Collins
Solutions Engineer · Leapcell

Key Takeaways
- Go의
map
유형은 키-값 쌍을 저장하고 검색하는 효율적인 방법을 제공합니다. - 맵은 런타임 패닉을 방지하기 위해 사용하기 전에 초기화해야 합니다.
- Go 맵의 반복 순서는 예측할 수 없습니다.
프로그래밍에서 사전은 키-값 쌍을 저장하는 데이터 구조로, 고유한 키를 기반으로 효율적인 데이터 검색을 가능하게 합니다. Go에서는 내장된 map
유형이 이러한 기능을 제공합니다.
맵 선언 및 초기화
Go에서 맵은 다음 구문을 사용하여 선언됩니다.
var m map[KeyType]ValueType
여기서 KeyType
은 키의 유형이고 ValueType
은 값의 유형입니다. 예를 들어 문자열 키와 정수 값을 가진 맵을 만들려면 다음과 같이 합니다.
var m map[string]int
그러나 이 방법으로 맵을 선언하면 nil
로 초기화됩니다. nil 맵에 요소를 추가하려고 시도하면 런타임 패닉이 발생합니다. 따라서 사용하기 전에 맵을 초기화하는 것이 필수적입니다. 이는 make
함수를 사용하여 수행할 수 있습니다.
m = make(map[string]int)
또는 맵 리터럴을 사용하여 값을 가진 맵을 선언하고 초기화할 수 있습니다.
m := map[string]int{ "Alice": 30, "Bob": 25, }
요소 추가 및 액세스
맵에 요소를 추가하거나 업데이트하려면 다음과 같이 합니다.
m["Charlie"] = 35
값을 검색하려면 다음과 같이 합니다.
age := m["Alice"]
키가 존재하지 않으면 m["NonExistentKey"]
는 맵의 값 유형의 제로 값을 반환합니다. int
맵의 경우 이는 0
이 됩니다.
키 존재 여부 확인
맵에 키가 있는지 확인하고 해당 값을 검색하려면 다음과 같이 합니다.
age, exists := m["Alice"] if exists { // 키가 존재하면 'age' 사용 } else { // 키가 존재하지 않음 }
요소 삭제
맵에서 키-값 쌍을 제거하려면 다음과 같이 합니다.
delete(m, "Bob")
존재하지 않는 키에 대해 delete
를 사용해도 오류가 발생하지 않습니다.
맵 반복
range
키워드와 함께 for
루프를 사용하여 맵의 모든 키-값 쌍을 반복할 수 있습니다.
for key, value := range m { fmt.Println(key, value) }
맵 요소에 대한 반복 순서는 지정되지 않으며 다를 수 있습니다.
맵을 집합으로 사용
맵 조회는 누락된 키에 대해 제로 값을 반환하므로 맵을 집합으로 사용할 수 있습니다. 예를 들어 방문한 노드를 추적하려면 다음과 같이 합니다.
visited := make(map[string]bool) visited["A"] = true if visited["B"] { // 노드 B가 방문됨 } else { // 노드 B가 방문되지 않음 }
이 시나리오에서 visited["B"]
는 false
를 반환하여 노드 B가 방문되지 않았음을 나타냅니다.
중첩 맵
Go는 중첩 맵을 지원하므로 복잡한 데이터 구조를 만들 수 있습니다. 예를 들어 다음과 같습니다.
nestedMap := make(map[string]map[string]int) nestedMap["Alice"] = map[string]int{"Math": 90, "Science": 85}
중첩 맵에서 값을 액세스하거나 할당할 때 런타임 패닉을 방지하려면 내부 맵이 초기화되었는지 확인하십시오.
결론
Go의 map
유형은 키-값 쌍을 저장하고 관리하는 강력하고 유연한 데이터 구조입니다. 선언, 초기화 및 작업을 이해함으로써 Go 프로그램에서 맵을 효과적으로 활용할 수 있습니다.
더 자세한 내용은 맵에 대한 공식 Go 블로그를 참조하십시오. Go maps in action
FAQs
value, exists := m[key]
구문을 사용하십시오. 여기서 exists
는 키 존재 여부를 나타내는 부울입니다.
맵의 값 유형의 제로 값(예: int
의 경우 0
, string
의 경우 ""
)을 반환합니다.
예, map[Type]bool
을 사용하여 true
는 요소의 존재를 나타냅니다.
Go 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오. 요청이나 요금은 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 손쉬운 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 확장.
- 제로 운영 오버헤드 - 빌드에만 집중하십시오.
설명서에서 자세히 알아보십시오!
X에서 팔로우하세요: @LeapcellHQ