>  기사  >  백엔드 개발  >  golang 맵의 용도는 무엇입니까?

golang 맵의 용도는 무엇입니까?

(*-*)浩
(*-*)浩원래의
2019-12-09 14:03:482902검색

golang 맵의 용도는 무엇입니까?

맵 데이터 유형은 다양한 언어로 제공됩니다. 키와 값을 하나씩 매핑하여 빠른 검색, 추가, 삭제 등의 작업을 수행할 수 있는 키와 값의 형태를 갖는 해시 테이블입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.