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

“无法将myType用作类型接口{}”吗?我以为Go中所有类型都算作interface {}?

“无法将myType用作类型接口{}”吗?我以为Go中所有类型都算作interface {}?

Go
吃鸡游戏 2021-04-09 17:19:15
我正在尝试编写一个可以采用任何类型的函数(更具体地说,试图使它采用任何类型的protobuffer,但如果需要的话,我会适应更广泛的通用性)。根据我所读的内容,似乎可以这样完成:func processSlice(mySlice []interface{}) void{  // Do stuff in here}但是,当我尝试将其与一片原型一起使用时,出现以下错误:cannot use myProtoSlice (type []*MyProto) as type []interface{} in argument to processSlice
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您无法将切片从一种类型的切片转换为另一种类型(您可以键入),这会很昂贵,并且他们决定最好使您明确。

为您实际上需要处理的每个切片类型编写函数(如果您知道类型并且数量不多),可能就不会那么痛苦。


查看完整回答
反对 回复 2021-04-19
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

该错误清楚地描述了:


无法在processSlice的参数中将myProtoSlice(类型[] * MyProto)用作类型[] interface {}


[]interface{}接口的interface{}类型不是不同。Golang对类型严格。


将接口切片更改为仅接口,以包装您在函数中接收的值。修改以下代码:


func processSlice(mySlice []interface{}) void{

  // Do stuff in here

}

传递接口


func processSlice(mySlice interface{}) void{

  // Do stuff in here

}


查看完整回答
反对 回复 2021-04-19
  • 2 回答
  • 0 关注
  • 423 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信