首页 > 解决方案 > 如何解决类型系统的浅接口匹配?(协变结果类型)

问题描述

令人愉快的 golang 接口匹配似乎只深入了一层。它将具体结构(或它们的指针)匹配到呈现的接口,但是,如果它们被包装在任何东西中,则匹配失败。

这也会影响通道:它们传递的值类型不符合接口兼容性检查的条件。

最小插图:

type I0 interface{ fn0() }
type I1 interface{ fn1() I0 }

type S0 struct{}

func (s *S0) fn0() {}

type S1 struct{}

func (s *S1) fn1() *S0 { return &S0{} }

在操场上观看

现在在这个简单的例子中,可以只调整S1fn1返回类型,但我想稍后使用类型开关来恢复原始类型而不调用函数。


Go 的常见问题解答中提到了函数用例作为协变结果类型

标签: gotypes

解决方案


推荐阅读