2017-05-05 40 views
0

對此的答案可能很明顯,但我總是問,因爲我沒有找到一個很好的解釋。類型別名的開關類型開關

我有我做了兩個例子,他們做的是幾乎同樣的事情,但是,第一個方法使用int的,另一種是使用接口:

接口:https://play.golang.org/p/yb2oVaOJGF
詮釋:https://play.golang.org/p/_z8Mm0II41

有人能解釋爲什麼他們產生不同的輸出?

+3

您能否在問題本身中添加一些相關的代碼? – captncraig

回答

1

在Apple和Orange定義爲interface{}的情況下,類型開關由實現該接口的任何東西滿足。

對於空接口,即什麼都可以,並且它需要第一個匹配的情況。

當Apple和Orange是非接口類型(int)的「別名」時,只有顯式爲Apple或Orange的變量才能滿足類型切換。

+0

謝謝,但這個答案對我來說還不夠好,因爲我仍然覺得它有點不直觀。看起來他們應該產生完全相同的結果。我知道接口與原語不同,但這並不能解釋使用類型別名時的不同行爲。 – Nohack

+2

'type Apple interface {}'不是一個類型別名。它說「任何實現這一套方法的東西都是有效的蘋果」。在空界面的情況下,字面上任何事情都可以滿足它。 – captncraig

1

由於您正在將Apple和Orange類型定義爲空接口,因此它們都可以滿足任何需求。

空的接口基本上沒有特定的。

第一個示例中的所有內容都可以作爲int類型既不是蘋果也不是桔子。

看看你的第一個例子的代碼的這個小小的變化。

https://play.golang.org/p/LDtvbXnjT7