Go에서 지도는 문자열을 사용자 지정 익명 구조체와 연결할 수 있습니다. 이러한 맵을 선언하면 Gogland와 같은 IDE에서 "중복 유형 선언" 경고가 발생할 수 있습니다. 이로 인해 struct{}{} 선언과 {} 선언 간의 차이점에 대한 의문이 제기됩니다.
구문 설명
struct{}{} 구문은 다음과 같은 복합 리터럴을 나타냅니다. 유형(struct{})과 값({})을 모두 포함합니다. 반면, {} 역시 복합 리터럴이지만 유형이 생략되었습니다.
컴파일러 의미
일반적으로 복합 리터럴에는 유형을 지정해야 합니다. . 그러나 맵을 선언할 때 키와 값의 유형은 맵 유형에서 유추됩니다. 따라서 복합 리터럴 값이 추론된 유형과 일치하는 경우 복합 리터럴 값을 할당할 때 해당 유형을 생략할 수 있습니다.
이 예외는 복합 리터럴 사양에 따라 Go 1.5에서 도입되었습니다. 특정 상황에서 유형을 명시적으로 지정할 필요가 없으므로 코드가 단순화됩니다.
설명을 위해 다음 익명 구조체 할당을 고려하세요.
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
Gogland는 중복 유형 선언에 대해 경고할 수 있습니다. 다음 구문을 사용하여 이 문제를 해결할 수 있습니다.
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
유형이 할당되는 값에서 유추되므로 이 구문에서는 struct{} 유형을 생략합니다.
요약하면, struct{}{} 및 {}는 전자가 복합 리터럴에 유형을 명시적으로 포함하는 반면, 후자는 이를 생략하고 둘러싸는 맵 선언의 유형 유추에 의존한다는 점입니다.
위 내용은 Go의 익명 구조체: `struct{}{}와 {}`를 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!