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