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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-14 22:50:02874ブラウズ

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

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