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