> 백엔드 개발 > Golang > My Go 인터페이스 메소드 반환 유형이 컴파일 오류를 일으키는 이유는 무엇입니까?

My Go 인터페이스 메소드 반환 유형이 컴파일 오류를 일으키는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-09 22:38:02
원래의
772명이 탐색했습니다.

Why Does My Go Interface Method Return Type Cause a Compilation Error?

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

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