我對接口變量的。(type)語法很困惑。是否有可能使用這樣的:我可以在Golang中將變量類型與。(類型)進行比較嗎?
var a,b interface{}
// some code
if first.(type) == second.(type) {
}
或reflect.TypeOf()來檢查的基礎類型的A和B是相同類型的唯一選擇?我在上面的代碼中進行了哪些比較?
我對接口變量的。(type)語法很困惑。是否有可能使用這樣的:我可以在Golang中將變量類型與。(類型)進行比較嗎?
var a,b interface{}
// some code
if first.(type) == second.(type) {
}
或reflect.TypeOf()來檢查的基礎類型的A和B是相同類型的唯一選擇?我在上面的代碼中進行了哪些比較?
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
請注意,如果兩個變量都不是「int」類型,則第二個示例會驚恐不安。 –
您需要指定類型。該語法用於製作關於接口的type assertions,而不是關於檢查特定類型。 你必須使用reflect.TypeOf
。
您可以查看此answer以正確使用類型斷言。
*我在上面的代碼中做了什麼比較?*沒有,因爲它沒有編譯。 –