Golang에서 인터페이스를 반환하는 인터페이스 메서드를 구현하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-11 06:29:02
원래의
328명이 탐색했습니다.

How to Implement Interface Methods Returning Interfaces in Golang?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿