>  기사  >  백엔드 개발  >  golang 맵이 동시적이지 않은 이유는 무엇입니까?

golang 맵이 동시적이지 않은 이유는 무엇입니까?

(*-*)浩
(*-*)浩원래의
2019-12-14 11:40:593731검색

golang 맵이 동시적이지 않은 이유는 무엇입니까?

지도 데이터 유형은 키와 값의 형태로 된 해시 테이블이므로 빠른 검색, 추가, 삭제 및 기타 작업을 위해 키와 값을 하나씩 매핑할 수 있습니다. Go 언어도 예외는 아니며 지도 데이터 구조 유형을 제공합니다.

기본 제공 지도를 사용하지 마세요                                                                                  '' ' ' ''''''''''''''''' 어웨이 스루 스루 스루 오버-에서-to -- 로 가볍게 이동하세요 이는 golang 공식 문서에도 설명되어 있으므로 선언한 후 바로 사용하지 마세요. 처음에는 다음과 같은 실수를 저지르는 경우가 많습니다:

var m map[string]string
m["result"] = "result"

위 코드의 첫 번째 줄은 맵을 초기화하지 않지만, 쓰기 작업은 널 포인터에 대한 참조이므로 고통이 발생합니다.

그러므로 메모리를 할당하고 초기화하려면 make 함수를 사용해야 한다는 점을 기억해야 합니다.

m := make(map[string]string)
m["result"] = "result"

golang의 map은 동시성이 안전하지 않습니다

저는 map을 자주 사용하는데 사용하면 기분이 좋습니다. 그런데 어느 날 갑자기 트래픽이 늘어나더니 프로그램이 무의식적으로 끊겼어요. 무슨 일이 일어났는지는 아직 모르겠지만 이전에는 분명히 잘 작동하고 있었습니다.

따라서 어설션 확인, 동시성 안전 고려 사항 등과 같은 몇 가지 좋은 습관을 처음부터 개발해야 합니다.

지도는 사용하기 쉽지만 여전히 조심해야 합니다. 아마도 많은 사람들은 Golang의 내장 맵이 실제로 동시성이 안전하지 않다는 사실을 아직도 모르고 있을 것입니다.

어쩌면 golang의 sync.Map

sync.Map을 사용해 볼 수도 있습니다. 실제로는 동기화 패키지에 있는 Map이라는 golang 사용자 정의 구조입니다. 구조 프로토타입은 다음과 같습니다:

type Map struct {
   mu Mutex
   read atomic.Value // readOnly
   dirty map[interface{}]*entry
   misses int
}

위 내용은 golang 맵이 동시적이지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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