Go 知识点(13) — 如何判断变量类型
生活随笔
收集整理的這篇文章主要介紹了
Go 知识点(13) — 如何判断变量类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在 Go 語言中可以使用類型斷言來判斷變量的類型,類型斷言的使用有兩種方式:
- 返回兩個值,分別是斷言為設置類型后的值和斷言成功的標志符;
- 返回一個值,表示斷言為設置類型的值;
1. 返回單個值的使用
1.1 斷言成功
如下代碼,假如我們無法判斷變量 a 的類型,可以使用下面的斷言方式
func main() {a := []int{1, 2, 3}value := interface{}(a).([]int)fmt.Printf("value is %#v\n", value) // value is []int{1, 2, 3}
}
其中 interface{}(a) 表示將 a 轉換為接口類型,如果修改為以下語句
value := (a).([]int)
會報錯誤
invalid type assertion: a.([]int) (non-interface type []int on left)
意思是說 a 是非接口類型。
1.2 斷言失敗
看下面代碼,如果我們將變量 a 斷言為 int 那么會發生什么情況呢?
func main() {a := []int{1, 2, 3}value := interface{}(a).(int)fmt.Printf("value is %#v\n", value)
}
輸出結果為:
panic: interface conversion: interface {} is []int, not int
觸發 panic 原因是斷言 a 為 int ,但實際上 a 是 []int ,所以觸發異常。
那怎樣避免這種 panic 呢? 接著往下看
2. 返回多個值的使用
在這一小節,我們使用返回的兩個值來判斷斷言是否成功。
func main() {a := []int{1, 2, 3}value, ok := interface{}(a).(int)if ok {fmt.Printf("value is %#v\n", value)} else {fmt.Println("斷言失敗, value is ", value)}
}
其中 OK 表示斷言結果的 bool 值,代碼輸出結果為:
斷言失敗, value is 0
在這里如果斷言失敗后,此時的 value 值為斷言類型的零值,此處為 int 的零值。
3. 要斷言的變量類型不確定
有這么一種情況是如果要斷言的類型不確定,即變量的類型有可能是好幾種類型中的一種,那么我們該如何應對呢?
使用 switch 語句可以幫助我們更好的做這個事情。
func main() {a := []int{1, 2, 3}// value, ok := interface{}(a).(int)switch t := interface{}(a).(type) {case int:fmt.Println("type is int")case string:fmt.Println("type is string")default:fmt.Printf("other type %T\n", t)}
}
注意 interface{}(a).(type) 此處使用的是 .(type) ,并且 .(type) 只能用于 switch 語句中。
總結
以上是生活随笔為你收集整理的Go 知识点(13) — 如何判断变量类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国丝印硅胶行业市场
- 下一篇: 2022-2028年中国水基胶行业市场深