我正在努力学习围棋,我发现了一个很好的资源.

有关方法重载的示例如下所示:

package main
import "fmt"

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) //Yes you can split into 2 lines here.
}

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

是否可以调用"base" struct 的(Human)方法,例如.sam.Human.SayHi()下转换不起作用(因为没有类型层次 struct ,对吗?)

推荐答案

可以通过使用嵌入类型名称的名称调用父 struct 的成员来访问父 struct 的嵌入 struct .这很难说,所以演示起来可能更容易些.

 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相关问答推荐

语法-for循环中的initit陈述是否允许分配?

如何在AWS SDK Go v2 STS上正确使用重试

Go Colly-访问for循环中的URL

在nixos上找不到XInput2.h头文件的包

Go:如何在不加载正文的情况下创建 http 代理通行证

如何在 Go 中将 int 转换为包含 complex128 的泛型类型?

用于提取 <*n 的正则表达式(其中 n 是一个数字)

golang:解组动态 YAML 注释

如何使用 GolangCI 删除未使用的导入

Golang Oauth2 服务帐户返回空刷新令牌字符串

Go http.FileServer 给出意外的 404 错误

emersion/go-imap - imap.FetchRFC822:无效内存地址或零指针取消引用

Go cmp - 如何为以 struct 为键的映射定义自定义相等性?

为什么 Go 被认为是部分抢占式的?

如何使用 Go 获取 X11 中的窗口列表

自定义指标未显示在 prometheus web ui 中,grafana 中也是如此

转到文本/模板模板:如何根据模板本身的值数组判断值?

如何在golang中使用ozzo验证进行时间最大验证

如何使用 context.WithCancel 启动和停止每个会话的心跳?

Go 1.18 泛型如何使用接口定义新的类型参数