임베디드 구조체 유형 필드 액세스
새 구조체 유형을 정의할 때 다른 구조체를 필드로 포함할 수 있습니다. 이는 복잡한 데이터 구조를 생성하거나 기능을 상속하는 데 유용할 수 있습니다. 그러나 포함된 구조체 필드에 액세스하면 포인터 처리로 인해 컴파일 오류가 발생할 수 있습니다.
다음 코드를 고려하세요.
<code class="go">type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine Tires } func main() { car := new(Cars) car.number = 4 car.power = 342 fmt.Println(car) }</code>
이 코드는 엔진 구조체를 포인터 필드( *엔진)을 Cars 구조체에 넣습니다. 구문은 정확하지만 코드를 컴파일하면 다음 오류가 발생합니다.
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x23bb]
이 문제를 해결하려면 포함된 엔진 필드를 올바르게 초기화해야 합니다. 이는 포함된 구조체에 대한 포인터를 사용하여 달성할 수 있습니다.
<code class="go">func main() { car := new(Cars) car.Engine = new(Engine) // Initialize the Engine pointer car.power = 342 car.number = 4 fmt.Println(car) }</code>
이제 코드는 성공적으로 컴파일되고 오류 없이 포함된 필드 "power"에 액세스합니다.
위 내용은 Go에서 내장된 구조체 필드에 액세스할 때 컴파일 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!