访问嵌入式结构体字段
在 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
了解嵌入式字段
要访问嵌入式 Engine 结构中的 power 字段,不能直接使用 car.power。嵌入字段通过中间指针或值间接访问。
解决方案
解决错误的一种方法是为 Cars 中的嵌入字段分配一个新的 Engine struct:
<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>
Output
&{0x10328100 {4}} &{342} 342 {4} 4
在此修改后的代码中,car.Engine 现在指向一个有效的 Engine 结构,允许您访问 power 字段.
注意:您还可以使用反射或其他高级技术访问嵌入字段,但上述方法通常是最简单的。
以上是当 Go 中的嵌入式结构字段是指针时,如何访问它们?的详细内容。更多信息请关注PHP中文网其他相关文章!