맵 데이터 유형은 다양한 언어로 제공됩니다. 키와 값을 하나씩 매핑하여 빠른 검색, 추가, 삭제 등의 작업을 수행할 수 있는 키와 값의 형태를 갖는 해시 테이블입니다. Go 언어도 예외는 아니며 지도 데이터 구조 유형을 제공합니다.
내장 지도는 즉시 사용하면 안 됩니다 use using (권장 학습: go)
Golang에서 지도는 포인터와 같은 참조 유형입니다. 슬라이싱, 선언된 후 nil을 가리킴 다음 코드로. 이는 golang 공식 문서에도 설명되어 있으므로 선언한 후 바로 사용하지 마세요. 처음에는 다음과 같은 실수를 저지르는 경우가 많습니다:
var m map[string]string m["result"] = "result"
위 코드의 첫 번째 줄은 맵을 초기화하지 않지만, 쓰기 작업은 널 포인터에 대한 참조이므로 고통이 발생합니다.
그러므로 메모리를 할당하고 초기화하려면 make 함수를 사용해야 한다는 점을 기억해야 합니다.
m := make(map[string]string) m["result"] = "result"
golang의 map은 동시성이 안전하지 않습니다.
저는 map을 자주 사용하는데, 사용하는 것이 재미있지만 갑자기 어느 날 트래픽이 증가했는데, 제가 눈치 채지 못한 채 프로그램이 중단되었습니다. 이전에는 분명히 무슨 일이 일어났는지 모르겠습니다. 따라서 처음에는 어설션 확인, 동시성 안전 고려 사항 등과 같은 몇 가지 좋은 습관을 개발해야 합니다.
어쩌면 golang의 sync.Map
sync.Map을 사용해 볼 수도 있습니다. 실제로는 동기화 패키지에서 golang이 사용자 정의한 Map이라는 구조입니다. 구조의 프로토타입은 다음과 같습니다.
type Map struct { mu Mutex read atomic.Value // readOnly dirty map[interface{}]*entry misses int }
동시성 안전을 보장하기 위해 잠금 메커니즘을 사용하는 Mutex가 있음을 알 수 있습니다. 이 패키지의 맵은 저장, 로드, 삭제, 범위 및 기타 작업을 제공합니다. 그리고 동기화 패키지의 맵은 즉시 사용할 수 있습니다. 즉, 다음과 같이 선언 후 바로 사용할 수 있습니다.
var m sync.Map m.Store("method", "eth_getBlockByHash") value, ok := m.Load("method") t.Logf("value=%v,ok=%v\n",value,ok)
위 내용은 golang 맵의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!