Golang での埋め込み構造体メソッドのオーバーライド
Golang では、構造体が別の構造体を埋め込む (埋め込みと呼ばれる) と、埋め込まれた構造体のフィールドそしてメソッドは埋め込み構造体に直接アクセスできるようになります。ただし、埋め込み構造体が埋め込み構造体からメソッドを再定義する場合、元のメソッドをオーバーライドできます。
次のコードを考えてみましょう。
<code class="go">type Base struct { val int } func (b *Base) Set(i int) { b.val = i } type Sub struct { Base changed bool }</code>
Base を Sub に埋め込みました。ここで、Sub から Base の Set メソッドにアクセスしようとすると、Sub 自体の Set メソッドによって隠蔽されます。
<code class="go">func t16() { s := &Sub{} // This calls Base's Set method s.Base.Set(1) // This causes an error, as s.Set hides Base's Set s.Set(10) }</code>
この動作をオーバーライドするには、Base の Set メソッドを明示的に呼び出すように Sub の Set メソッドを再定義します。
<code class="go">func (b *Sub) Set(i int) { b.Base.Set(i) b.changed = true }</code>
ここで、s.Set() を呼び出すと、Base の Set メソッドが呼び出され、同時に Sub の変更を追跡できるようになります。
<code class="go">func t16() { s := &Sub{} // Calls Sub's overridden Set method s.Set(10) fmt.Printf("%+v\n", s) // Output: {Base:{val:10} changed:true} }</code>
このメソッドを使用すると、以下のことが可能になります。埋め込み構造体フィールドを介して元のメソッドへのアクセスを維持しながら、埋め込み構造体のメソッドをオーバーライドします。
以上がGolang で埋め込み構造体メソッドをオーバーライドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。