Go 结构中的方法重载和子类型
考虑以下 Go 代码:
package main import "fmt" type Human struct { name string age int phone string } type Employee struct { Human // Embedding 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) } func main() { sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"} sam.SayHi() }
此代码演示了方法重载,其中 SayHi 方法在 Human 和 Employee 结构中定义。当对 Employee 类型的变量调用方法时,会调用 Employee 结构体中的方法。
访问基本结构体方法
人们可能想知道这是否可能调用 Employee 实例的 Human 结构中定义的 SayHi 方法。在 Go 中,访问基本结构的方法非常简单。为此,请使用结构体成员的名称引用嵌入类型,如下所示:
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中文网其他相关文章!