サブタイプ時に Go の基本構造体メソッドにアクセスできますか?

Barbara Streisand
リリース: 2024-11-12 02:43:01
オリジナル
836 人が閲覧しました

Can I Access Base Struct Methods in Go When Subtyping?

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

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