在 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中文網其他相關文章!