首页  >  文章  >  后端开发  >  如何在 Go 中重写嵌入结构的方法?

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

Patricia Arquette
Patricia Arquette原创
2024-10-26 14:08:31295浏览

How do I override an embedded struct's method in Go?

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

在 Go 中嵌入结构体时,嵌入结构体的方法将作为结构体的顶级成员使用嵌入结构。这允许轻松访问嵌入结构的功能。但是,如果嵌入结构体实现了自己的同名方法,则嵌入结构体的方法将被隐藏。

考虑以下示例:

<code class="go">package main

import "fmt"

type Base struct {
    val int
}
func (b *Base)Set(i int) {
    b.val = i
}
type Sub struct {
    Base
    changed bool
}

func (b *Sub)Set(i int) {
    b.val = i
    b.changed = true
}
func main() {
    s := &Sub{}
    s.Base.Set(1)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>

在此示例中,Sub 结构体嵌入 Base 结构。 Base 结构体有一个 Set 方法,该方法被 Sub 结构体自己的 Set 方法隐藏。当调用 s.Base.Set(1) 时,调用的是 Base 结构体的 Set 方法,而不是 Sub 结构体的 Set 方法。

要覆盖嵌入结构体中嵌入结构体的方法,只需调用嵌入结构体即可嵌入结构体方法中的结构体方法。例如,以下代码将覆盖 Sub 结构中 Base 结构的 Set 方法:

<code class="go">func (b *Sub)Set(i int) {
    b.Base.Set(i)
    b.changed = true
}</code>

通过此更改,当调用 s.Set(1) 时,将调用 Sub 结构的 Set 方法,它将调用 Base 结构体的 Set 方法,并将更改的字段设置为 true。这允许您覆盖嵌入结构的方法的行为,同时仍然可以访问嵌入结构的功能。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn