인터페이스를 반환하는 인터페이스 메서드와 구체적인 유형
Go에서 인터페이스를 반환하는 인터페이스 메서드는 유형 구현에 유연성을 제공합니다. 그러나 구체적인 유형으로 이러한 메서드를 구현하려고 하면 오류가 발생할 수 있습니다.
예를 고려하세요.
<code class="go">func GetStringer() fmt.Stringer</code>
여기서 GetStringer는 fmt.Stringer 인터페이스를 반환하는 인터페이스 메서드입니다.
Foo와 같은 구체적인 유형이 자신의 값(*Foo)을 반환하도록 구현되면 오류가 발생합니다. 이는 Foo가 fmt.Stringer를 직접 구현하지 않기 때문입니다.
이 문제를 해결하려면 다음과 같은 여러 접근 방식을 취할 수 있습니다.
어댑터 유형 사용
구체적인 유형을 래핑하고 필수 인터페이스를 준수하는 어댑터 유형을 생성합니다.
<code class="go">type MyBar struct{ Bar } func (b *MyBar) GetStringer() fmt.Stringer { return b.Bar.GetStringer() }</code>
이 접근 방식을 사용하면 원래 유형 Bar를 수정하지 않고도 확장이 가능합니다.
인터페이스
또는 구체적인 유형을 필요한 인터페이스로 직접 래핑할 수 있습니다.
<code class="go">func (b *Bar) GetStringer() fmt.Stringer { return &Foo{"foo"} }</code>
여기서 구체적인 유형 Bar는 인스턴스를 반환하는 GetStringer 메서드의 구현을 제공합니다. fmt.Stringer를 구현하는 Foo 유형입니다.
두 메소드 모두 Go에서 구체적인 유형으로 인터페이스 메소드 반환을 수용하기 위한 옵션을 제공합니다. 적절한 접근 방식은 코드의 특정 요구 사항 및 아키텍처에 따라 다릅니다.
위 내용은 Go의 인터페이스 메서드에서 구체적인 유형을 어떻게 반환할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!