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中文网其他相关文章!