>백엔드 개발 >Golang >하위 구조체에 오버로드된 경우 Go에서 임베디드 유형의 메서드에 어떻게 액세스할 수 있나요?

하위 구조체에 오버로드된 경우 Go에서 임베디드 유형의 메서드에 어떻게 액세스할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-11-14 22:50:02885검색

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 구조체의 메서드를 재정의합니다.

내장형 메서드 액세스

오버로드된 메서드에도 불구하고 포함된 구조체의 메서드에 액세스하려면 , 다음 구문을 사용할 수 있습니다.

parentMember.embeddedMemberName.methodName()

이 경우 Human을 호출하려면 Employee 구조체의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.