首页 > 后端开发 > Golang > 正文

子类型化时可以访问 Go 中的基本结构方法吗?

Barbara Streisand
发布: 2024-11-12 02:43:01
原创
865 人浏览过

Can I Access Base Struct Methods in Go When Subtyping?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板