亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

迭代+強制轉換

迭代+強制轉換

Go
狐的傳說 2021-04-05 12:15:01
我有這個在清單上使用迭代器的代碼片段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 是一個布爾值,指示轉換是否成功,而不是引起運行時恐慌。


查看完整回答
反對 回復 2021-04-26
  • 1 回答
  • 0 關注
  • 247 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號