Casting 迭代+;围棋
我有一段代码,在列表中使用迭代器Casting 迭代+;围棋,casting,go,Casting,Go,我有一段代码,在列表中使用迭代器 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()方法 但在执行时会引发此运行时错误: 死机:接口转换:接口是*
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()方法
但在执行时会引发此运行时错误:
死机:接口转换:接口是*geometry.faceTri,而不是geometry.faceTri
(几何图形是软件包的一部分)
因此,任何人都可以向我指出一个资源,它解释了使用迭代器+强制转换的go方式?这实际上是go中的类型断言,而不是强制转换(强制转换是某些兼容类型之间的编译时转换,即int->int32) 根据您发布的错误,您的代码中只有一个小错误。
x
的底层类型是*faceTri
(指向faceTri结构的指针),因此类型断言应该是x.(*faceTri)
编辑:
有几件事需要澄清并超越你的问题。go中的类型断言不是强制转换,例如:interface\u与\u-underline\u-type\u-int.(int64)
将死机,即使int
可以强制转换为int64
此外,还可以使用逗号ok习惯用法检查类型断言
not\u接口,ok:=some\u接口(some\u类型)
ok
是一个布尔值,指示转换是否成功,而不是导致运行时死机。如果成功,问题实际上是我断言了错误的类型。