별도의 패키지에서 동일한 메서드 시그니처를 사용하여 인터페이스 구현
Go에서는 동일한 메서드 시그니처를 사용하여 두 개의 서로 다른 인터페이스를 구현하는 것이 불가능합니다. 다른 패키지. 일반적으로 각 인터페이스 유형은 특정 구현을 기대하여 유형 안전성을 보장합니다.
그러나 객체가 동일한 이름의 메서드로 여러 인터페이스를 충족해야 하는 경우 모든 인터페이스에 대해 일관된 논리를 구현하는 것이 어려울 수 있습니다.
사례 예:
동일한 메서드 시그니처를 가진 인터페이스 Doer가 포함된 두 개의 패키지 A와 B를 고려합니다.
package A type Doer interface { Do() string }
package B type Doer interface { Do() string }
문제 :
메인 패키지에서 단일 객체 C는 A.Doer와 B.Doer를 모두 구현하도록 설계되었습니다.
package main func (c C) Do() string { return "C now implements both A and B" }
그러나 이 구현은 다음 경우에 버그를 발생시킵니다. C에서 구현된 Do 메소드는 A.Doer 전용이므로 B.FuncB(c)를 호출합니다.
해결책:
Go의 임베딩 기능을 사용하여 별도의 래퍼 유형 생성 가능:
적절한 래퍼 유형을 A.FuncA 및 B.FuncB에 인수로 전달하면 각 인터페이스에 대해 원하는 로직을 유지할 수 있습니다.
추가 참고 사항:
위 내용은 Go에서 별도 패키지의 동일한 메서드 시그니처를 사용하여 인터페이스를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!