ホームページ  >  記事  >  バックエンド開発  >  Go でメソッドがオーバーロードされている場合に、埋め込み構造体メソッドにアクセスする方法は?

Go でメソッドがオーバーロードされている場合に、埋め込み構造体メソッドにアクセスする方法は?

DDD
DDDオリジナル
2024-11-12 14:23:01505ブラウズ

How to Access Embedded Struct Methods When Method Overloading in Go?

Go の埋め込みを使用したメソッド オーバーロードの技術

Golang の領域では、メソッド オーバーロードを使用して、名前は同じだがシグネチャが異なる複数のメソッドを定義できます。エンベディングを使用した構造化された構成を詳しく調べると、この概念は興味深いものになります。このコンテキストで生じる疑問を検討してみましょう。

クエリ: メソッドがオーバーロードされた場合の埋め込み構造体メソッドへのアクセス

次のコード スニペットを考えてみましょう。

type Human struct {
    name string
    age int
    phone string
}

type Employee struct {
    Human 
    company string
}

func (h *Human) SayHi() {
    fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
}

func (e *Employee) SayHi() {
    fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name,
        e.company, e.phone)
}

Can we invoke the sam.Human.SayHi() のような構文を使用した "base" (Human) 構造体のメソッド?

解決策: ネストされたメソッド呼び出しの採用

Golang の埋め込みにより、埋め込まれた構造体のメンバーにアクセスするシームレスな方法が提供されます親構造体内。 Employee インスタンスで Human 構造体の SayHi メソッドを呼び出すには、単に次を使用します:

sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}
sam.SayHi() // calls Employee.SayHi
sam.Human.SayHi() // calls Human.SayHi

出力:

Hi, I am Sam, I work at Golang Inc. Call me on 111-888-XXXX
Hi, I am Sam you can call me on 111-888-XXXX

Go は、埋め込み構造体でネストされたメソッド呼び出しを許可し、メソッドのオーバーロード後でもメソッドは継承されます。

以上がGo でメソッドがオーバーロードされている場合に、埋め込み構造体メソッドにアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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