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

DDD
풀어 주다: 2024-10-30 04:23:02
원래의
931명이 탐색했습니다.

How to Avoid Runtime Errors When Accessing Embedded Fields in Go Structs with Pointers?

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

Go에서 구조체는 다른 구조체를 필드로 포함할 수 있습니다. 이는 복잡한 데이터 구조의 구성을 허용합니다. 그러나 포인터를 사용할 때 포함된 필드 값에 액세스하면 혼란스러울 수 있습니다.

예 및 문제

다음 구조체 정의를 고려하세요.

<code class="go">type Engine struct {      
    power int             
}                         
                          
type Tires struct {       
    number int            
}                         
                          
                          
type Cars struct {           
    *Engine               
    Tires                 
}  </code>
로그인 후 복사

In Engine 구조체(*Engine)에 대한 내장 포인터인 Cars 구조체가 정의됩니다. 다음과 같이 Cars 인스턴스가 생성되면:

<code class="go">func main() {                    
                                     
    car := new(Cars)             
    car.number = 4               
    car.power = 342     
    fmt.Println(car)            
} </code>
로그인 후 복사

다음 오류로 인해 프로그램이 패닉 상태가 됩니다.

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x23bb]
로그인 후 복사

해결 방법

To 포함된 필드 값에 액세스하려면 명시적인 필드 이름이나 포함된 포인터를 통한 간접 참조가 필요합니다. 다음은 간접 참조를 통해 power 필드에 액세스하는 예입니다.

<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)
    car.power = 342
    car.number = 4
    fmt.Println(car)
    fmt.Println(car.Engine, car.power)
    fmt.Println(car.Tires, car.number)
}</code>
로그인 후 복사

이 코드는 Cars 인스턴스를 성공적으로 초기화하고, 포함된 필드에 값을 할당하고, 예상되는 출력을 인쇄합니다.

&{0x10328100 {4}}
&{342} 342
{4} 4
로그인 후 복사

위 내용은 포인터를 사용하여 Go 구조체에 포함된 필드에 액세스할 때 런타임 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!