"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go의 익명 구조체: `map[string]struct{}`에서 유형을 지정하는 것이 언제 중복됩니까?

Go의 익명 구조체: `map[string]struct{}`에서 유형을 지정하는 것이 언제 중복됩니까?

2024-11-08에 게시됨
검색:193

 Anonymous Struct in Go:  When is it Redundant to Specify the Type in `map[string]struct{}`?

익명 구조체: 구조체{}{}와 {}

Go에서 문자열-익명 구조체 맵 선언 간의 차이점 공개 두 가지 방법으로 수행할 수 있습니다:

var Foo = map[string]struct{}{
    "foo": struct{}{},
}
var Foo = map[string]struct{}{
    "foo": {},
}

두 표현식 모두 유효하지만 두 번째 표현식은 Gogland에서 "중복 유형 선언"에 관한 경고를 발생시킵니다. 명확히 하기 위해 이 두 형식의 근본적인 차이점을 살펴보겠습니다.

먼저 다음을 고려하세요.

struct{}{}

이것은 복합 리터럴입니다. 유형(struct{})과 해당 값({})으로 구성됩니다. 대조적으로, 이것은:

{}

유형을 생략하고 값만 유지하는 복합 리터럴입니다.

일반적으로 복합 리터럴에는 다음을 포함해야 합니다. 컴파일러가 의도한 유형을 식별하는 데 도움이 되는 유형 사양입니다. 언어 사양에 따라:

CompositeLit = LiteralType LiteralValue .

그러나 지도 복합 리터럴을 정의할 때 키 및 값 유형은 이미 지도 유형에 의해 지정됩니다. 따라서 이러한 지정된 유형의 값을 제공하려는 경우 유형 사양을 생략할 수 있습니다.

이 생략은 다음과 같이 Go 사양에 의해 허용됩니다.

"Within a composite literal of array, slice, or map type T, elements or map keys that are themselves composite literals may elide the respective literal type if it is identical to the element or key type of T."

결론적으로 두 가지 처음에 제시된 표현은 동일한 최종 결과를 얻습니다. 그러나 후자는 지도 복합 리터럴에서 중복 유형 사양을 생략할 수 있는 언어 기능을 활용합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3