首頁  >  文章  >  後端開發  >  使用指標時如何存取 Go 結構中的嵌入欄位?

使用指標時如何存取 Go 結構中的嵌入欄位?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 14:17:02309瀏覽

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。要存取嵌入式引擎的power 字段,我們需要明確初始化Engine 字段:

<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