Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Casting 迭代+;围棋_Casting_Go - Fatal编程技术网

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
是一个布尔值,指示转换是否成功,而不是导致运行时死机。

如果成功,问题实际上是我断言了错误的类型。