ホームページ  >  記事  >  バックエンド開発  >  Go で埋め込み構造体メソッドをオーバーライドするには?

Go で埋め込み構造体メソッドをオーバーライドするには?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-28 16:10:02790ブラウズ

How to Override Embedded Struct Methods in Go?

Go での埋め込み構造体のメソッドのオーバーライド

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 メソッドをオーバーライドします。 Base の元の Set メソッドを Sub 内から呼び出すには、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 中国語 Web サイトの他の関連記事を参照してください。

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