迭代+强制转换

我有这个在清单上使用迭代器的代码片段


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


(几何是包装)


因此,有人可以指向我介绍解释使用迭代器+强制转换的方法的资源吗?


狐的传说
浏览 218回答 1
1回答

宝慕林4294392

实际上,这在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 是一个布尔值,指示转换是否成功,而不是引起运行时恐慌。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go