GO語言類型查詢類型斷言示例解析
類型查詢
我們知道interface的變量里面可以存儲任意類型的數(shù)值(該類型實現(xiàn)了interface)。那么我們怎么反向知道這個變量里面實際保存了的是哪個類型的對象呢?目前常用的有兩種方法:
- comma-ok斷言
- switch測試
1.comma-ok斷言
Go語言里面有一個語法,可以直接判斷是否是該類型的變量: value, ok = element.(T),這里value就是變量的值,ok是一個bool類型,element是interface變量,T是斷言的類型。
如果element里面確實存儲了T類型的數(shù)值,那么ok返回true,否則返回false。
var i []interface{} i = append(i, 10, 3.14, "aaa", demo15) for _, v := range i { if data, ok := v.(int); ok { fmt.Println("整型數(shù)據(jù):", data) } else if data, ok := v.(float64); ok { fmt.Println("浮點型數(shù)據(jù):", data) } else if data, ok := v.(string); ok { fmt.Println("字符串數(shù)據(jù):", data) } else if data, ok := v.(func()); ok { //函數(shù)調(diào)用 data() } }
2. switch測試
var i []interface{} i = append(i, 10, 3.14, "aaa", demo15) for _,data := range i{ switch value:=data.(type) { case int: fmt.Println("整型",value) case float64: fmt.Println("浮點型",value) case string: fmt.Println("字符串",value) case func(): fmt.Println("函數(shù)",value) } }
類型斷言
if判斷
package main import "fmt" type Student struct { name string id int } func main() { i := make([]interface{}, 3) i[0] = 1 //int i[1] = "hello go" //string i[2] = Student{"mike", 666} //Student //類型查詢,類型斷言 //第一個返回下標,第二個返回下標對應的值, data分別是i[0], i[1], i[2] for index, data := range i { //第一個返回的是值,第二個返回判斷結果的真假 if value, ok := data.(int); ok == true { fmt.Printf("x[%d] 類型為int, 內(nèi)容為%d\n", index, value) } else if value, ok := data.(string); ok == true { fmt.Printf("x[%d] 類型為string, 內(nèi)容為%s\n", index, value) } else if value, ok := data.(Student); ok == true { fmt.Printf("x[%d] 類型為Student, 內(nèi)容為name = %s, id = %d\n", index, value.name, value.id) } } }
Switch判斷
package main import "fmt" type Student struct { name string id int } func main() { i := make([]interface{}, 3) i[0] = 1 //int i[1] = "hello go" //string i[2] = Student{"mike", 666} //Student //類型查詢,類型斷言 for index, data := range i { switch value := data.(type) { case int: fmt.Printf("x[%d] 類型為int, 內(nèi)容為%d\n", index, value) case string: fmt.Printf("x[%d] 類型為string, 內(nèi)容為%s\n", index, value) case Student: fmt.Printf("x[%d] 類型為Student, 內(nèi)容為name = %s, id = %d\n", index, value.name, value.id) } } }
以上就是GO語言類型查詢類型斷言示例解析的詳細內(nèi)容,更多關于GO類型查詢類型斷言 的資料請關注腳本之家其它相關文章!
相關文章
Go語言pointer及switch?fallthrough實戰(zhàn)詳解
這篇文章主要為大家介紹了Go語言pointer及switch?fallthrough實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06Golang 函數(shù)執(zhí)行時間統(tǒng)計裝飾器的一個實現(xiàn)詳解
這篇文章主要介紹了Golang 函數(shù)執(zhí)行時間統(tǒng)計裝飾器的一個實現(xiàn)詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03