Go에서 구조체{}{}와 {}의 차이점 탐구
Go의 익명 구조체는 간단한 데이터를 나타내는 편리한 방법을 제공합니다. 명명된 유형을 정의하지 않은 구조. 그러나 이러한 구조체를 생성하기 위한 struct{}{} 및 {} 구문은 차이점에 대한 의문을 제기할 수 있습니다.
Go에서 익명 구조체에 대한 문자열 맵을 선언하는 경우 아래와 같이 합니다.
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
IntelliJ Idea에서 "중복 유형 선언"이라는 경고가 나타날 수 있습니다. 이 문제를 해결하기 위해 다음 코드를 사용할 수 있습니다.
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
두 구문의 차이점은 컴파일러가 불완전한 익명 구조체 리터럴을 처리하는 방법에 있습니다. 첫 번째 구문인 struct{}{}에서는 익명임에도 불구하고 유형이 명시적으로 지정됩니다. 두 번째 구문인 {}에서는 유형이 완전히 생략됩니다.
Go 언어 사양에 따르면 지도 유형의 복합 리터럴 내에서 지도 유형에서 키와 값의 유형을 알 수 있는 경우 자체적으로 해당 유형의 값을 지정하려는 경우 생략할 수 있습니다. 이는 컴파일러가 이 맥락에서 {}에 대한 유형 사양을 요구하지 않는 이유를 설명합니다.
이 생략은 실수로 인해 Go 1.5 이상에서만 유효하다는 점에 유의하는 것이 중요합니다.
위 내용은 Go Maps에서 익명 구조체에 대해 언제 \'struct{}{}\'를 생략할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!