내장된 구조체 필드 액세스
Go에서 구조체에는 내장 필드가 있을 수 있으며, 이를 통해 한 구조체가 다른 구조체의 필드를 재사용할 수 있습니다. 그러나 이러한 포함된 필드에 액세스하면 혼동이 발생할 수 있습니다.
다음 코드를 고려하세요.
<code class="go">type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine // embedded pointer-to-struct field Tires } func main() { car := new(Cars) car.number = 4 car.power = 342 fmt.Println(car) }</code>
컴파일 시 오류가 발생할 수 있습니다.
runtime error: invalid memory address or nil pointer dereference
임베디드 필드 이해
임베디드 엔진 구조체의 전력 필드에 액세스하려면 car.power를 직접 사용할 수 없습니다. 포함된 필드는 중간 포인터 또는 값을 통해 간접적으로 액세스됩니다.
해결책
오류를 해결하는 한 가지 방법은 Cars의 포함된 필드에 새 엔진을 할당하는 것입니다. struct:
<code class="go">package main import "fmt" type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine // embedded pointer-to-struct field Tires } func main() { car := new(Cars) car.Engine = new(Engine) car.power = 342 car.number = 4 fmt.Println(car) fmt.Println(car.Engine, car.power) fmt.Println(car.Tires, car.number) }</code>
출력
&{0x10328100 {4}} &{342} 342 {4} 4
이 수정된 코드에서 car.Engine은 이제 유효한 엔진 구조체를 가리키며, 이를 통해 전력 필드에 액세스할 수 있습니다. .
참고: 리플렉션이나 기타 고급 기술을 사용하여 포함된 필드에 액세스할 수도 있지만 일반적으로 위의 접근 방식이 가장 간단합니다.
위 내용은 Go에서 포인터인 내장 구조체 필드에 어떻게 액세스합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!