GO語(yǔ)言類型查詢類型斷言示例解析
類型查詢
我們知道interface的變量里面可以存儲(chǔ)任意類型的數(shù)值(該類型實(shí)現(xiàn)了interface)。那么我們?cè)趺捶聪蛑肋@個(gè)變量里面實(shí)際保存了的是哪個(gè)類型的對(duì)象呢?目前常用的有兩種方法:
- comma-ok斷言
- switch測(cè)試
1.comma-ok斷言
Go語(yǔ)言里面有一個(gè)語(yǔ)法,可以直接判斷是否是該類型的變量: value, ok = element.(T),這里value就是變量的值,ok是一個(gè)bool類型,element是interface變量,T是斷言的類型。
如果element里面確實(shí)存儲(chǔ)了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("浮點(diǎn)型數(shù)據(jù):", data)
} else if data, ok := v.(string); ok {
fmt.Println("字符串?dāng)?shù)據(jù):", data)
} else if data, ok := v.(func()); ok {
//函數(shù)調(diào)用
data()
}
}
2. switch測(cè)試
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("浮點(diǎn)型",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
//類型查詢,類型斷言
//第一個(gè)返回下標(biāo),第二個(gè)返回下標(biāo)對(duì)應(yīng)的值, data分別是i[0], i[1], i[2]
for index, data := range i {
//第一個(gè)返回的是值,第二個(gè)返回判斷結(jié)果的真假
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語(yǔ)言類型查詢類型斷言示例解析的詳細(xì)內(nèi)容,更多關(guān)于GO類型查詢類型斷言 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉樹必會(huì)知識(shí)點(diǎn)總結(jié)
如果你是一個(gè)開發(fā)人員,或多或少對(duì)樹型結(jié)構(gòu)都有一定的認(rèn)識(shí)。二叉樹作為樹的一種,是一種重要的數(shù)據(jù)結(jié)構(gòu),也是面試官經(jīng)??嫉臇|西。本文為大家總結(jié)了一些二叉樹必會(huì)知識(shí)點(diǎn),需要的可以參考一下2022-08-08
Go語(yǔ)言pointer及switch?fallthrough實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了Go語(yǔ)言pointer及switch?fallthrough實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
使用Go語(yǔ)言實(shí)現(xiàn)常見hash算法
這篇文章主要為大家詳細(xì)介紹了使語(yǔ)言實(shí)現(xiàn)各種常見hash算法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考下2024-01-01
Golang 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)裝飾器的一個(gè)實(shí)現(xiàn)詳解
這篇文章主要介紹了Golang 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)裝飾器的一個(gè)實(shí)現(xiàn)詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-03-03

