首頁  >  文章  >  後端開發  >  當 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

了解嵌入式欄位

了解嵌入式欄位

了解嵌入式欄位

<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>
要存取嵌入式Engine 結構中的power 字段,不能直接使用car.power。嵌入欄位透過中間指標或值間接存取。

解決方案

&{0x10328100 {4}}
&{342} 342
{4} 4

解決錯誤的一種方法是為Cars 中的嵌入字段分配一個新的Engine struct:

Output

在此修改後的程式碼中,car.Engine 現在指向一個有效的Engine 結構,允許您存取power 欄位.注意:您也可以使用反射或其他高級技術存取嵌入字段,但上述方法通常是最簡單的。

以上是當 Go 中的嵌入式結構欄位是指標時,如何存取它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn