ホームページ > バックエンド開発 > Golang > Golang で埋め込み構造体メソッドをオーバーライドするにはどうすればよいですか?

Golang で埋め込み構造体メソッドをオーバーライドするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-27 08:55:30
オリジナル
909 人が閲覧しました

How Can You Override Embedded Struct Methods in Golang?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート