Go의 익명 구조체와 빈 구조체
Go에서는 익명 구조체와 빈 구조체 사이에 차이가 있어 혼란을 초래할 수 있습니다. 채널 작업 시.
익명 구조체
코드에서 done <- struct{}{} 줄은 익명 구조체를 사용합니다. 익명 구조체는 명명된 형식 선언 없이 문 내에서 선언적으로 정의됩니다. 이 경우 구조체에는 필드가 없으며 사실상 비어 있습니다.
채널에 익명 구조체를 사용하는 이유는 무엇입니까?
채널에서 값을 보내거나 받으려면 다음이 필요합니다. 유형이 안전한 인터페이스. 익명 구조체를 사용하여 예상 유형 chan struct{}로 채널을 생성합니다. 이를 통해 데이터를 전송하지 않고도 정보에 신호를 보낼 수 있습니다.
done <- struct{}{}에서 추가 중괄호가 필요한 이유는 컴파일러가 struct{} 유형의 값으로 평가되는 표현식을 기대하기 때문입니다. 기본 구조체{}를 보내면 구문 오류가 발생합니다.
Empty Struct
한편, make(chan struct{})와 같은 선언은 named 구조체 유형, struct{}, 크기가 0입니다. 일반적으로 보내거나 받는 실제 값이 관련이 없을 때 신호 목적으로 사용됩니다.
for _ = range langs { <-done }
의 필요성 라인은 메인 고루틴이 조기에 종료되지 않도록 하는 데 필수적입니다. 모든 전사 고루틴이 완료될 때까지 차단됩니다. 이 줄이 없으면 모든 전사가 신호를 받기 전에 기본 고루틴이 종료되어 잘못된 결과가 발생하게 됩니다.
빈 구조체의 장점
위 내용은 Go 채널의 익명 구조체와 빈 구조체: 언제 어느 것을 사용해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!