2016-01-15 59 views
2

我對接口變量的。(type)語法很困惑。是否有可能使用這樣的:我可以在Golang中將變量類型與。(類型)進行比較嗎?

var a,b interface{} 
// some code 
if first.(type) == second.(type) { 
} 

或reflect.TypeOf()來檢查的基礎類型的A和B是相同類型的唯一選擇?我在上面的代碼中進行了哪些比較?

+3

*我在上面的代碼中做了什麼比較?*沒有,因爲它沒有編譯。 –

回答

5

someInterface.(type)只在型號開關中使用。事實上,如果你試圖運行它,你會在錯誤信息中看到它。

func main() { 
    var a, b interface{} 
    a = 1 
    b = 1 

    fmt.Println(a.(type) == b.(type)) 
} 

prog.go:10:使用類型開關之外(類型)

你可以做什麼,而不是爲a.(int) == b.(int),這是從int(a) == int(b)

func main() { 
    var a, b interface{} 
    a = 1 
    b = 1 

    fmt.Println(a.(int) == b.(int)) 
} 
真的沒有不同

true

+7

請注意,如果兩個變量都不是「int」類型,則第二個示例會驚恐不安。 –

3

您需要指定類型。該語法用於製作關於接口的type assertions,而不是關於檢查特定類型。 你必須使用reflect.TypeOf

您可以查看此answer以正確使用類型斷言。

相關問題