포인터가 아닌 값에서 sync.WaitGroup 메서드를 호출할 수 있는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-24 02:57:10
원래의
577명이 탐색했습니다.

Why Can sync.WaitGroup Methods Be Called on Non-Pointer Values?

sync.WaitGroup의 메소드 세트

sync.WaitGroup은 고루틴 모음이 완료될 때까지 기다릴 수 있는 동기화 프리미티브입니다. . 설명서에는 Add, Done 및 Wait 메서드에 포인터 수신기가 필요하다고 나와 있지만 포인터가 아닌 값에도 사용할 수 있습니다. 이것이 어떻게 가능합니까?

비결은 sync.WaitGroup의 빈 메소드 세트에 있습니다. 이는 sync.WaitGroup의 모든 메소드가 포인터 수신자임을 의미합니다. 다음과 같은 sync.WaitGroup 유형의 값을 생성할 때:

var wg sync.WaitGroup
로그인 후 복사

실제로는 sync.WaitGroup 구조체에 대한 포인터를 생성하는 것입니다. 이 포인터는 wg 변수에 대한 메서드를 호출할 때 자동으로 역참조됩니다. 예를 들어, 다음 코드는 성공적으로 컴파일됩니다.

wg.Add(1)
wg.Done()
wg.Wait()
로그인 후 복사

Go 컴파일러는 메소드를 호출하기 전에 암시적으로 wg를 sync.WaitGroup에 대한 포인터로 변환합니다. 이 동작은 Go 언어 사양에 정의되어 있습니다.

x가 주소 지정 가능하고 &x의 메서드 세트에 m이 포함된 경우 x.m()은 (&x).m()의 약어입니다.

따라서 포인터가 아닌 값에 주소를 지정할 수 있는 경우 포인터 수신기가 있는 메서드를 호출할 수 있습니다. 포인터가 아닌 값은 Go에서 항상 주소 지정이 가능합니다.

위 내용은 포인터가 아닌 값에서 sync.WaitGroup 메서드를 호출할 수 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿