gpt4 book ai didi

casting - 迭代+类型转换

转载 作者:IT王子 更新时间:2023-10-29 01:08:04 25 4
gpt4 key购买 nike

我有这段代码在列表上使用迭代器

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 :接口(interface)转换:接口(interface)是*geometry.faceTri,不是geometry.faceTri

(几何就是包裹)

所以,任何人都可以向我指出一个资源,该资源解释了使用迭代器 + 强制转换的方式吗?

最佳答案

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

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

编辑:

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

此外,您可以使用 comma-ok 习惯用法来检查类型断言

not_interface, ok := some_interface.(some_type)

ok 是一个 bool 值,指示转换是否成功,而不是导致运行时 panic 。

关于casting - 迭代+类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com