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

如何在 Go 中重写嵌入的结构体方法?

Barbara Streisand
发布: 2024-10-28 16:10:02
原创
800 人浏览过

How to Override Embedded Struct Methods in Go?

在 Go 中重写嵌入式结构体的方法

在 Go 中,当一个结构体继承另一个结构体(称为嵌入)时,它会继承该嵌入结构体的所有字段和方法结构。但是,如果继承结构定义了自己的方法,其名称与嵌入结构中的方法同名,则嵌入方法将被隐藏,或者更确切地说,被隐藏。

重写嵌入方法

重写嵌入结构中的方法涉及使用以下语法显式访问嵌入结构的方法:

<code class="go">yourStruct.EmbeddedStruct.method()</code>
登录后复制

例如:

<code class="go">type Base struct {
    val int
}
func (b *Base)Set(i int) {
    b.val = i
}

type Sub struct {
    Base
    changed bool
}</code>
登录后复制

这里,Sub 嵌入了 Base。但是,Sub 的 Set 方法会覆盖 Base 的 Set 方法。要从 Sub 中调用 Base 的原始 Set 方法,需要显式调用 b.Base.Set(i)。

示例:重写和调用嵌入方法

考虑以下代码:

<code class="go">func t16() {
    s := &Sub{}
    s.Set(1)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>
登录后复制

最初,调用 Sub 的 Set 方法,该方法覆盖 Base 的 Set 方法。为了演示 Base 的 Set 方法的原始行为,可以调用 s.Base.Set(10):

<code class="go">func t16() {
    s := &Sub{}
    s.Base.Set(10)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>
登录后复制

这确保调用 Base 的原始 Set 方法,绕过 Sub 的自定义 Set 方法及其后续修改改变了。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!