我有這個在清單上使用迭代器的代碼片段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
是一個布爾值,指示轉換是否成功,而不是引起運行時恐慌。
- 1 回答
- 0 關注
- 247 瀏覽
添加回答
舉報
0/150
提交
取消