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

迭代+强制转换

迭代+强制转换

Go
狐的传说 2021-04-05 12:15:01
我有这个在清单上使用迭代器的代码片段for x:= range s.faces.Iter(){    x.Render()}正如编译器所指出的那样,x的类型为interface {},并且在我的代码中没有定义方法(i interface)Render()。更改为for x:= range s.faces.Iter(){    x.(faceTri).Render()}进行编译,因为有一个func(f faceTri)Render()方法,但是在执行时会引发运行时错误:panic:接口转换:接口是* geometry.faceTri,而不是geometry.faceTri(几何是包装)因此,有人可以指向我介绍解释使用迭代器+强制转换的方法的资源吗?
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

实际上,这在go中称为类型断言,而不是强制类型转换(转换是某些兼容类型之间的编译时转换,即int-> int32)。

根据您发布的错误,您的代码中只有一个小错误。的基本类型x*faceTri(指向faceTri结构的指针),因此类型断言应为x.(*faceTri)

编辑:

需要澄清的几件事超出了您的问题。go中的类型断言不是强制转换,例如:interface_with_underlying_type_int.(int64)即使int可以强制转换为,也会发生恐慌int64

另外,您可以使用comma-ok惯用语检查类型断言

not_interface, ok := some_interface.(some_type)

ok 是一个布尔值,指示转换是否成功,而不是引起运行时恐慌。


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

添加回答

举报

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