存取嵌入式結構體字段
在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>
解決方案
&{0x10328100 {4}} &{342} 342 {4} 4
解決錯誤的一種方法是為Cars 中的嵌入字段分配一個新的Engine struct:
Output
在此修改後的程式碼中,car.Engine 現在指向一個有效的Engine 結構,允許您存取power 欄位.注意:您也可以使用反射或其他高級技術存取嵌入字段,但上述方法通常是最簡單的。以上是當 Go 中的嵌入式結構欄位是指標時,如何存取它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!