구조체 유형을 포인터로 사용하는 경우(예: 포인터 수신기를 사용하여 A 등), 구조체(B) 또는 해당 포인터(B)를 포함하는 것 사이의 선택은 미묘하지만 중요한 결과를 가져옵니다.
0 값
두 옵션의 0 값은 크게 다릅니다. 임베딩 B는 값이 0인 임베딩 객체를 직접 생성하므로 이에 대한 즉각적인 작업이 가능합니다.<code class="go">type AObj struct { B } var aObj AObj aObj.Print() // Prints 0 (B's zero value)</code>
<code class="go">type APtr struct { *B } var aPtr APtr aPtr.Print() // Panics (nil pointer dereference)</code>
복사
객체 복사 동작은 삽입 유형에 따라 다릅니다. B가 개체로 포함된 경우 복사 시 새 개체가 생성됩니다.<code class="go">type AObj struct { B } aObj2 := aObj aObj.X = 1 aObj2.Print() // Prints 0 (copy of B's zero value)</code>
<code class="go">type APtr struct { *B } aPtr.B = &B{} aPtr2 := aPtr aPtr.X = 1 aPtr2.Print() // Prints 1 (shared underlying B)</code>
위 내용은 임베디드 구조체와 구조체에 대한 포인터: 0 값과 복사에 대한 거래는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!