2010-07-16 38 views
3

我有此代碼段,一個列表迭代+鑄造在去

for x:= range s.faces.Iter(){ 
    x.Render() 
} 

作爲編譯器的點上使用的迭代器,x是類型接口{}的和不存在的方法(ⅰ接口)Render()在我的代碼中定義。

改變到

for x:= range s.faces.Iter(){ 
    x.(faceTri).Render() 
} 

編譯,因爲有一個方法FUNC(F faceTri)渲染() 但在執行時該運行時引發錯誤:

恐慌:接口轉換:接口是* geometry.faceTri,不geometry.faceTri

(幾何是封裝)

因此,任何人都可以指向我一個resou解釋使用迭代器+投射的方法嗎?

回答

3

這實際上被稱爲類型斷言中去,而不是一個強制轉換(強制轉換是在某種兼容類型,即int - > int32之間的編譯時轉換)。

根據您發佈的錯誤,您的代碼中只有一個小小的錯誤。基礎類型的x*faceTri(一個指向faceTri結構),這樣類型的斷言應該x.(*faceTri)

編輯:

有幾件事情澄清並超越你的問題。在走式斷言不打石膏,例如:interface_with_underlying_type_int.(int64)會產生恐慌,即使int可以轉換爲int64

此外,您還可以使用逗號OK成語

not_interface, ok := some_interface.(some_type)

檢查類型斷言

ok是一個布爾值,指示轉換是否成功,而不是導致運行時恐慌。

+0

它的工作,問題是事實上,我斷言錯誤的類型。 – andijcr 2010-07-16 17:52:55