Go에서 인터페이스 반환 유형을 사용하여 인터페이스 메소드 구현
Go에서는 인터페이스 메소드가 인터페이스를 갖는 상황이 발생할 수 있습니다. 반환 유형. 이는 이러한 메소드를 어떻게 구현하는지에 대한 의문을 제기합니다.
제공된 예제 코드를 고려하십시오.
type IA interface { FB() IB } type IB interface { Bar() string } type A struct { b *B } func (a *A) FB() *B { return a.b } type B struct{} func (b *B) Bar() string { return "Bar!" }
이 코드를 컴파일하려고 하면 A 구조체의 FB 메소드가 반환되기 때문에 오류가 발생합니다. 필수 IB 인터페이스 유형 대신 *B 구체적인 유형.
이 문제를 해결하려면 A 구조체의 FB 메서드를 수정하여 반환하면 됩니다. IB 인터페이스 유형:
func (a *A) FB() IB { return a.b }
이제 A 구조체는 IA 인터페이스를 올바르게 구현하고 IA 유형으로 사용할 수 있습니다.
인터페이스가 다른 패키지에 정의된 경우, 메소드를 적절하게 구현하는 것은 여전히 가능합니다. 예를 들어, IA 및 IB가 foo 패키지에 정의되고 구현이 패키지 bar에 있는 경우 선언 및 구현은 다음과 같습니다.
선언(foo 패키지에서):
type IA interface { FB() IB }
구현(바에서) 패키지):
func (a *A) FB() foo.IB { return a.b }
반환된 값을 필수 인터페이스 유형으로 캐스팅하면 구현이 필수 인터페이스를 준수하고 성공적으로 컴파일될 수 있습니다.
위 내용은 Go에서 인터페이스 반환 유형을 사용하여 인터페이스 메소드를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!