ホームページ  >  記事  >  バックエンド開発  >  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 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。