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