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