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