子構造体でオーバーロードされている場合、Go で埋め込み型のメソッドにアクセスするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-14 22:50:02
オリジナル
782 人が閲覧しました

How Can I Access an Embedded Type's Method in Go When It's Overloaded in the Child Struct?

Go でのメソッドのオーバーロード: 埋め込み型メソッドへのアクセス

Go で構造体を操作する場合、親と構造体の両方でメソッドを定義できます。埋め込まれた (ネストされた) 構造体。ただし、子構造体でメソッドがオーバーロードされている場合、基本構造体のメソッドに直接アクセスすることは不可能に思えるかもしれません。

メソッドのオーバーロードによるメソッドのオーバーライド

この例では、 Employee 構造体には Human 構造体が埋め込まれます。どちらの構造体も SayHi() メソッドを定義します。ただし、Employee 構造体の SayHi() メソッドは、Human 構造体の SayHi() メソッドをオーバーライドします。

埋め込み型メソッドへのアクセス

オーバーロードされたメソッドにもかかわらず、埋め込み型構造体のメソッドにアクセスするにはでは、次の構文を使用できます:

parentMember.embeddedMemberName.methodName()
ログイン後にコピー

この場合、Employee 構造体から Human 構造体の SayHi() メソッドを呼び出すには、次の構文を使用します:

sam.Human.SayHi()
ログイン後にコピー

コード例

次の例は、埋め込み構造体のメソッドへのアクセスを示しています。

package main

import "fmt"

type Human struct {
    name string
    age int
    phone string
}

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

type Employee struct {
    Human
    company string
}

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() // 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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート