首页  >  文章  >  后端开发  >  使用指针时如何访问 Go 结构中的嵌入字段?

使用指针时如何访问 Go 结构中的嵌入字段?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-01 14:17:02309浏览

How to Access Embedded Fields in Go Structs When Using Pointers?

结构体类型嵌入字段访问

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn