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 struct Base 構造体を埋め込みます。 Base 構造体には Set メソッドがありますが、これは Sub 構造体自体の Set メソッドによって隠されています。 s.Base.Set(1) が呼び出されると、Sub 構造体の Set メソッドではなく、Base 構造体の 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 中国語 Web サイトの他の関連記事を参照してください。