Go 構造体でのメソッドのオーバーロードとサブタイプ
次の Go コードを考えてみましょう:
package main import "fmt" type Human struct { name string age int phone string } type Employee struct { Human // Embedding 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) } func main() { sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"} sam.SayHi() }
このコードはメソッドを示していますオーバーロードでは、SayHi メソッドが Human 構造体と Employee 構造体の両方で定義されています。 Employee 型の変数に対してメソッドが呼び出される場合、Employee 構造体のメソッドが呼び出されます。
基本構造体メソッドへのアクセス
それが可能なのか疑問に思うかもしれません。 Employee インスタンスの Human 構造体で定義された SayHi メソッドを呼び出します。 Go では、基本構造体のメソッドにアクセスするのは簡単です。これを行うには、以下に示すように、構造体のメンバー名を使用して埋め込み型を参照します。
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 の基本構造体メソッドにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。