首页 >后端开发 >Golang >当子结构中重载时,如何访问 Go 中的嵌入类型的方法?

当子结构中重载时,如何访问 Go 中的嵌入类型的方法?

Patricia Arquette
Patricia Arquette原创
2024-11-14 22:50:02836浏览

How Can I Access an Embedded Type's Method in Go When It's Overloaded in the Child Struct?

Go 中的方法重载:访问嵌入式类型方法

在 Go 中使用结构体时,可以在父级和父级上定义方法嵌入(嵌套)结构。然而,当子结构中的方法被重载时,直接访问基结构的方法似乎是不可能的。

使用方法重载重写方法

在提供的示例中, Employee 结构嵌入了 Human 结构。这两个结构都定义了 SayHi() 方法。但是,Employee 结构体的 SayHi() 方法会覆盖 Human 结构体中的方法。

访问嵌入类型方法

要访问嵌入结构体的方法,尽管有重载方法,您可以使用以下语法:

parentMember.embeddedMemberName.methodName()

在这种情况下,要从 Employee 结构调用 Human 结构的 SayHi() 方法,您可以使用:

sam.Human.SayHi()

代码示例

以下示例演示了访问嵌入结构体的方法:

package main

import "fmt"

type Human struct {
    name string
    age int
    phone string
}

func (h *Human) SayHi() {
    fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
}

type Employee struct {
    Human
    company string
}

func (e *Employee) SayHi() {
    fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name, e.company, e.phone)
}

func main() {
    sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}
    sam.SayHi() // calls Employee.SayHi()
    sam.Human.SayHi() // calls Human.SayHi()
}

输出:

Hi, I am Sam, I work at Golang Inc. Call me on 111-888-XXXX
Hi, I am Sam you can call me on 111-888-XXXX

这演示了即使在子结构中重载方法,您仍然可以使用上述语法访问嵌入类型的方法。

以上是当子结构中重载时,如何访问 Go 中的嵌入类型的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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