为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这种 func 类型转换在 Go 中失败?

为什么这种 func 类型转换在 Go 中失败?

Go
阿晨1998 2022-08-15 16:58:18
上下文:我正在尝试将类型转换为类型,但遇到编译错误。Go抱怨说类型转换是不可能的,但没有解释为什么。最小重现如下所示:func(*interface{}) boolfunc(*string) bool法典:type strIterFn func(*string) boolfunc someFactory (_ []interface{}) func(*interface{}) bool {  return func(_ *interface{}) bool { return true }}func main() {  strs := []interface{}{"hello", "world"}  strIterFn(someFactory(strs)) // --> this line fails to compile}游乐场: https://play.golang.org/p/oOSy50j_tKw
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

因为 Go 中没有类型协方差。

在 Go 常见问题解答中,它解释了:

Can I convert a []T to an []interface{}?

不直接。语言规范不允许这样做,因为这
两种类型在内存中没有相同的表示形式。必须将元素分别复制到目标切片。

这是对切片的解释,但对于函数来说,这是相同的想法。


此外,我发现您的代码示例很奇怪。你为什么需要?这是一个相当深奥的用例,需要一个指向接口的指针。*interface{}

也许这里正确的方法是重新设计?如果你能描述你试图解决的实际问题,可能会有其他解决方案。


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号