>  기사  >  백엔드 개발  >  Go에서 내장된 구조체 필드에 액세스할 때 컴파일 오류를 방지하는 방법은 무엇입니까?

Go에서 내장된 구조체 필드에 액세스할 때 컴파일 오류를 방지하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-27 10:28:30256검색

How to Avoid Compilation Errors When Accessing Embedded Struct Fields in Go?

임베디드 구조체 유형 필드 액세스

새 구조체 유형을 정의할 때 다른 구조체를 필드로 포함할 수 있습니다. 이는 복잡한 데이터 구조를 생성하거나 기능을 상속하는 데 유용할 수 있습니다. 그러나 포함된 구조체 필드에 액세스하면 포인터 처리로 인해 컴파일 오류가 발생할 수 있습니다.

다음 코드를 고려하세요.

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

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