인터페이스를 Golang에서 반환하는 인터페이스 메소드 구현
다른 인터페이스를 반환하는 인터페이스를 구현하려고 할 때 반환할 때 공통 오류가 발생합니다. 메서드 유형이 인터페이스에 정의된 예상 유형과 일치하지 않습니다. 다음 코드 조각을 고려하십시오.
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!" }
이 코드를 실행하면 다음 오류가 발생합니다.
cannot use a (type *A) as type IA in function argument: *A does not implement IA (wrong type for FB method) have FB() *B want FB() IB
해결책:
문제 A 구조체에 있는 FB 메서드의 반환 유형에 있습니다. IA 인터페이스는 FB가 IB를 반환할 것으로 예상하지만 구현에서는 *B를 반환합니다. 이를 수정하려면 다음과 같이 FB의 반환 유형을 IB로 수정합니다.
func (a *A) FB() IB { return a.b }
패키지 간 인터페이스 공유:
다른 패키지에서 인터페이스를 정의할 수 있습니다. 그리고 그것을 공유하세요. 이러한 경우 구조체에서 인터페이스를 구현할 때 메서드의 반환 유형에 전체 패키지 경로를 사용해야 합니다. 예를 들어 IA와 IB가 foo라는 패키지에 정의되어 있고 구현이 bar라는 패키지에 있는 경우 선언은 다음과 같습니다.
type IA interface { FB() foo.IB }
구현은 다음과 같습니다.
func (a *A) FB() foo.IB { return a.b }
위 내용은 Golang에서 인터페이스를 반환하는 인터페이스 메서드를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!