Go에서 인터페이스로 사용되는 인터페이스 메서드 반환 유형
질문:
인터페이스 구현 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
해결책:
이 문제를 해결하려면 , FB 메서드의 반환 유형은 IA 인터페이스에 지정된 유형과 일치해야 합니다. 따라서 다음 변경이 필요합니다.
func (a *A) FB() IB { return a.b }
이 수정을 사용하면 FB의 반환 유형이 이제 IA 인터페이스에 정의된 IB이므로 코드가 성공적으로 컴파일됩니다.
추가 고려 사항:
IA 및 IB 인터페이스가 별도의 패키지에 정의된 경우 IB가 포함된 패키지에 대한 import 문이 FB 메서드가 구현된 파일에 포함되어야 합니다. 또한 FB의 반환 유형은 적절한 패키지 이름으로 정규화되어야 합니다.
import ( "foo" // Package containing IB interface ) // Implementation in package bar func (a *A) FB() foo.IB { return a.b }
위 내용은 My Go 인터페이스 메소드 반환 유형이 컴파일 오류를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!