首页  >  文章  >  后端开发  >  Go中方法重载时如何访问嵌入式结构体方法?

Go中方法重载时如何访问嵌入式结构体方法?

DDD
DDD原创
2024-11-12 14:23:01465浏览

How to Access Embedded Struct Methods When Method Overloading in Go?

Go 中嵌入方法重载的艺术

在 Golang 领域,方法重载允许我们定义多个具有相同名称但不同签名的方法。当我们深入研究使用嵌入的结构化组合时,这个概念变得很有趣。让我们探讨一下在这种情况下出现的一个问题。

查询:方法重载时访问嵌入式结构方法

考虑以下代码片段:

type Human struct {
    name string
    age int
    phone string
}

type Employee struct {
    Human 
    company string
}

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

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)
}

我们可以调用“base”(人类)结构体的方法使用 sam.Human.SayHi() 等语法?

解决方案:拥抱嵌套方法调用

Golang 中的嵌入提供了一种访问嵌入结构体成员的无缝方式在父结构内。要在 Employee 实例上调用 Human 结构体的 SayHi 方法,我们只需使用:

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 允许在嵌入式结构体上进行嵌套方法调用,从而能够访问即使在方法重载之后也继承了方法。

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

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