對此的答案可能很明顯,但我總是問,因爲我沒有找到一個很好的解釋。類型別名的開關類型開關
我有我做了兩個例子,他們做的是幾乎同樣的事情,但是,第一個方法使用int的,另一種是使用接口:
接口:https://play.golang.org/p/yb2oVaOJGF
詮釋:https://play.golang.org/p/_z8Mm0II41
有人能解釋爲什麼他們產生不同的輸出?
對此的答案可能很明顯,但我總是問,因爲我沒有找到一個很好的解釋。類型別名的開關類型開關
我有我做了兩個例子,他們做的是幾乎同樣的事情,但是,第一個方法使用int的,另一種是使用接口:
接口:https://play.golang.org/p/yb2oVaOJGF
詮釋:https://play.golang.org/p/_z8Mm0II41
有人能解釋爲什麼他們產生不同的輸出?
在Apple和Orange定義爲interface{}
的情況下,類型開關由實現該接口的任何東西滿足。
對於空接口,即什麼都可以,並且它需要第一個匹配的情況。
當Apple和Orange是非接口類型(int)的「別名」時,只有顯式爲Apple或Orange的變量才能滿足類型切換。
謝謝,但這個答案對我來說還不夠好,因爲我仍然覺得它有點不直觀。看起來他們應該產生完全相同的結果。我知道接口與原語不同,但這並不能解釋使用類型別名時的不同行爲。 – Nohack
'type Apple interface {}'不是一個類型別名。它說「任何實現這一套方法的東西都是有效的蘋果」。在空界面的情況下,字面上任何事情都可以滿足它。 – captncraig
由於您正在將Apple和Orange類型定義爲空接口,因此它們都可以滿足任何需求。
空的接口基本上沒有特定的。
第一個示例中的所有內容都可以作爲int類型既不是蘋果也不是桔子。
看看你的第一個例子的代碼的這個小小的變化。
您能否在問題本身中添加一些相關的代碼? – captncraig