Go 인터페이스 메소드 반환 인터페이스가 구체적인 유형을 반환하는 메소드와 일치하지 않습니다
문제:
인터페이스를 반환하는 인터페이스 메서드는 구현 유형이 인터페이스를 구현하는 구체적인 유형이 아니라 인터페이스 자체를 선언하는 경우에만 작동합니다.
질문:
어떻게 할 수 있나요? 타사의 구체적인 유형에 대한 수정을 피하거나 이에 대해 직접 인터페이스하면서 이 문제를 해결하시겠습니까?
답변:
인터페이스 불일치를 조정하기 위해 우리는 캡슐화 기술을 사용합니다.
1. 래퍼 기술:
타사의 구체적인 유형을 래핑하고 원하는 인터페이스를 제공하는 새로운 유형을 만듭니다.
<code class="go">type MyBar Bar func (b *MyBar) GetStringer() fmt.Stringer { return &Foo{"foo"} }</code>
이 접근 방식을 사용하면 독창적인 콘크리트 유형.
2. 임베디드 유형 기술:
타사 구체적 유형을 새 유형에 포함하고 필요한 인터페이스 구현 제공:
<code class="go">type MyBar struct{ Bar } func (b *MyBar) GetStringer() fmt.Stringer { return b.Bar.GetStringer() }</code>
포함은 원래 구체적인 유형의 기능을 유지하면서 동시에 원하는 인터페이스로 확장합니다.
이러한 기술을 사용하면 원래의 구체적인 유형이 그렇지 않은 경우에도 지정된 인터페이스를 따르는 사용자 정의 유형을 생성할 수 있습니다. 이는 타사 유형을 더 넓은 인터페이스 기반 시스템에 통합하는 유연한 접근 방식을 제공합니다.
위 내용은 구체적인 유형으로 인터페이스 메서드를 구현할 때 인터페이스 불일치를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!