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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 15:53:021009검색

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

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