嵌入結構類型欄位存取
定義新結構類型時,可以嵌入其他結構作為欄位。這對於建立複雜的資料結構或繼承功能非常有用。但是,存取嵌入的結構體欄位有時會因指標處理而導致編譯錯誤。
考慮以下程式碼:
<code class="go">type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine Tires } func main() { car := new(Cars) car.number = 4 car.power = 342 fmt.Println(car) }</code>
此程式碼嘗試將 Engine 結構體作為指標欄位嵌入( *Engine) 在 Cars 結構中。雖然語法正確,但編譯程式碼會導致以下錯誤:
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x23bb]
要解決此問題,需要正確初始化嵌入式 Engine 欄位。這可以使用指向嵌入結構的指標來實現:
<code class="go">func main() { car := new(Cars) car.Engine = new(Engine) // Initialize the Engine pointer car.power = 342 car.number = 4 fmt.Println(car) }</code>
現在,程式碼成功編譯並存取嵌入欄位“power”,沒有遇到任何錯誤。
以上是在 Go 中存取嵌入式結構體欄位時如何避免編譯錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!