>  기사  >  백엔드 개발  >  Go에서 포인터인 내장 구조체 필드에 어떻게 액세스합니까?

Go에서 포인터인 내장 구조체 필드에 어떻게 액세스합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-28 21:55:02329검색

How Do You Access Embedded Struct Fields in Go When They Are Pointers?

내장된 구조체 필드 액세스

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

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