Go에서 구조체는 다른 구조체 유형을 포함할 수 있습니다. 그러나 포함된 필드에 액세스하는 것은 초보자에게 어려울 수 있습니다. 다음 코드 조각을 고려하세요.
<code class="go">type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine Tires }</code>
여기서 Cars 구조체에는 *Engine 포인터 유형이 포함되어 있습니다. 코드를 컴파일하려고 하면 다음 오류가 발생합니다.
<code class="go">panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x23bb]</code>
이 오류는 Cars 구조체의 Engine 필드가 포인터이고 nil로 초기화되기 때문에 발생합니다. 내장된 엔진의 전원 필드에 액세스하려면 엔진 필드를 명시적으로 초기화해야 합니다.
<code class="go">package main import "fmt" type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine Tires } func main() { car := new(Cars) car.Engine = new(Engine) // Initialize the Engine field 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
보시다시피 Cars 구조체의 Engine 필드를 명시적으로 초기화하여 내장된 Engine 구조체의 power 필드에 액세스할 수 있었습니다. 이는 Go에서 임베디드 구조체로 작업할 때 흔히 발생하는 관행입니다.
위 내용은 포인터를 사용할 때 Go 구조체에 포함된 필드에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!