go - 如何解决类型系统的浅接口匹配?(协变结果类型)
问题描述
令人愉快的 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{} }
现在在这个简单的例子中,可以只调整S1
的fn1
返回类型,但我想稍后使用类型开关来恢复原始类型而不调用函数。
Go 的常见问题解答中提到了函数用例作为协变结果类型。
解决方案
推荐阅读
- android - 复制 Volley.jar,添加 linkedIn SDK 后,复制 zip 条目 [ik.class == volley.jar:com/android/volley/AuthFailureError.class]
- c++ - 如何将 GPAC(MP4Box) 库添加到 Qt 项目?
- java - 将 RXJava groupby 与连续项目一起使用
- asp.net - 在 Asp.net Web 表单中等效的 MVC 异常过滤器
- javascript - 如何改进 Node.js 中的赋值代码(ES6 风格)
- excel - 如何同时使用 vlookup 和 If 语句来解决 Excel 中的问题?
- here-api - 在 Here API 中的渡轮上包括车辆公里成本
- plugins - 替代 Toast.Forms.Plugin for Xamarin Forms App
- ios - 如何将 NSValue 转换为 CLLocationCoordinate2D
- calendar - Instagram 浏览器不处理 ICS 链接