Golang에서 익명 구조체를 사용하여 포인터 조각을 초기화하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-01 15:53:02
원래의
948명이 탐색했습니다.

How to Initialize Slices of Pointers with Anonymous Structs in Golang?

Golang에서 익명 구조체를 사용하여 포인터 조각 초기화

GOPL 7장(섹션 7.6)의 코드 조각에서 익명 구조체 포인터 조각을 초기화하는 데 사용됩니다.

<code class="go">var tracks = []*Track{
    {"Go", "Delilah", "From the Roots Up", 2012, length("3m38s")},
    {"Go", "Moby", "Moby", 1992, length("3m37s")},
    {"Go Ahead", "Alicia Keys", "As I Am", 2007, length("4m36s")},
    {"Ready 2 Go", "Martin Solveig", "Smash", 2011, length("4m24s")},
}</code>
로그인 후 복사

Track 유형이 이미 정의되어 있고 구문 {1, 2}가 이름이 지정되지 않은 새 구조체를 초기화하는 것처럼 보이기 때문에 혼란스러워 보일 수 있습니다. 그러나 이 구문은 구조체를 명시적으로 정의하지 않고 슬라이스 유형의 요소를 초기화하는 데 사용되는 단축키입니다.

"{}" 표기법은 기본적으로 다음과 같습니다.

<code class="go">type Ex struct {
    A, B int
}

a := []Ex{Ex{1, 2}, Ex{3, 4}}</code>
로그인 후 복사

여기서 타입명(Ex)은 생략됩니다. 이 구문은 포인터 조각을 초기화하는 경우에도 작동합니다.

<code class="go">c := []*Ex{&Ex{1, 2}, &Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}
e := []*Ex{{1, 2}, &Ex{3, 4}}</code>
로그인 후 복사

이 경우 포인터를 생성하기 위해 & 연산자가 익명 구조체에 자동으로 적용됩니다.

그러나 초기화를 시도하면 익명 구조체에 대한 참조가 있는 포인터 조각(& 연산자 없음)은 구문 오류를 발생시킵니다.

<code class="go">f := []*Ex{&{1, 2}, &{3, 4}} // Syntax Error!</code>
로그인 후 복사

익명 구조체로 포인터 조각을 초기화하려면 익명 구조체를 변환해야 합니다. 포인터에 연결하거나 포인터를 완전히 생략할 수 있습니다.

<code class="go">f := []struct{
    A, B int
}{
    {1, 2}, {3, 4}
}
// or with pointers...
g := []*struct{
    A, B int
}{
    {1, 2}, {3, 4}
}</code>
로그인 후 복사

여기서 익명 구조체는 별도의 유형 정의가 필요 없이 포인터 조각 내에 포함됩니다. 이 구문은 Golang의 맵 및 기타 컬렉션에서 익명 구조체를 초기화하는 데 일반적으로 사용됩니다.

위 내용은 Golang에서 익명 구조체를 사용하여 포인터 조각을 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!