>백엔드 개발 >Golang >Go의 익명 구조체: `struct{}{}와 {}`를 언제 사용해야 합니까?

Go의 익명 구조체: `struct{}{}와 {}`를 언제 사용해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 07:01:02391검색

 Anonymous Structs in Go: When to Use `struct{}{} vs. {}`?

익명 구조체의 구조체{}{}와 {}의 차이점 이해

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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