>  기사  >  백엔드 개발  >  포인터를 사용할 때 Go 구조체에 포함된 필드에 액세스하는 방법은 무엇입니까?

포인터를 사용할 때 Go 구조체에 포함된 필드에 액세스하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 14:17:02313검색

How to Access Embedded Fields in Go Structs When Using Pointers?

구조체 유형 포함 필드 액세스

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.