首頁 > 後端開發 > Golang > 使用指標存取 Go 結構體中的嵌入欄位時如何避免執行時錯誤?

使用指標存取 Go 結構體中的嵌入欄位時如何避免執行時錯誤?

DDD
發布: 2024-10-30 04:23:02
原創
993 人瀏覽過

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 Cars 結構體中定義了一個指向Engine 結構體(* Engine) 的嵌入指標。當建立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]
登入後複製

解決方案

至存取嵌入欄位值,需要明確欄位名稱或透過嵌入指標間接存取。以下是透過間接存取 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板