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 중국어 웹사이트의 기타 관련 기사를 참조하세요!