>백엔드 개발 >Golang >다른 패키지의 내보내지 않은 메서드를 사용하여 Go 인터페이스를 구현할 수 있나요?

다른 패키지의 내보내지 않은 메서드를 사용하여 Go 인터페이스를 구현할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-12-10 06:18:10131검색

Can Go Interfaces Be Implemented with Unexported Methods in Different Packages?

Go에서 내보내지 않은 메서드로 인터페이스 구현

특정 구현 세부 정보를 숨기면서 회계 시스템 액세스를 위한 인터페이스를 정의하려는 상황을 고려해보세요. . 인터페이스 메소드를 내보내지 않고 로컬 어댑터에서 동일한 함수를 호출하는 내보낸 함수를 기본 패키지에 제공하려고 합니다. 하지만 내보내지 않은 메서드 구현으로 인해 컴파일러에서 오류가 발생합니다.

다른 패키지에서 내보내지 않은 메서드로 인터페이스를 구현하는 것이 가능합니까?

답변:

잠재적인 해결책 중 하나는 익명 구조체를 활용하는 것입니다. fields:

type Adapter struct {
    accounting.IAdapter
}

그러나 이 접근 방식에서는 내보내지 않은 메서드의 자체 구현을 제공할 수 없다는 점에 유의해야 합니다. 즉, Adapter에서 IAdapter.getInvoice() 구현을 재정의할 수 없습니다.

대체 접근 방식:

다른 패키지에서 Accountingsystem.Adapter 유형을 숨기는 경우 원하는 경우 유형을 내보내지 않은 상태로 만들고 계정에 어댑터를 등록하는 기능을 만듭니다. package:

package accounting

type IAdapter interface {
    GetInvoice() error
}

---

package accountingsystem

type adapter struct {}

func (a adapter) GetInvoice() error {return nil}  

func SetupAdapter() {
    accounting.SetAdapter(adapter{})
}

---

package main

func main() {
    accountingsystem.SetupAdapter()
}

이 접근 방식은 내보내지 않은 어댑터 유형을 계정 패키지 내에 래핑하여 다른 패키지에 대한 접근성을 효과적으로 제한함으로써 문제를 해결합니다.

위 내용은 다른 패키지의 내보내지 않은 메서드를 사용하여 Go 인터페이스를 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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