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