>  기사  >  백엔드 개발  >  Go에서 인터페이스 반환 유형을 사용하여 인터페이스 메소드를 구현하는 방법은 무엇입니까?

Go에서 인터페이스 반환 유형을 사용하여 인터페이스 메소드를 구현하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-09 15:12:02525검색

How to Implement Interface Methods with Interface Return Types in Go?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.