gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

go語(yǔ)言類(lèi)型斷言是啥

在go語(yǔ)言中,類(lèi)型斷言是一個(gè)使用在接口值上的操作,用于檢查接口類(lèi)型變量所持有的值是否實(shí)現(xiàn)了期望的接口或者具體的類(lèi)型,語(yǔ)法為“value, ok := x.(T)”。通過(guò)類(lèi)型斷言可以做到的事情:1、檢查i是否為nil;2、檢查i存儲(chǔ)的值是否為某個(gè)類(lèi)型。

go語(yǔ)言類(lèi)型斷言是啥

本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。

斷言是什么?

斷言是編程術(shù)語(yǔ),表示為一些布爾表達(dá)。編寫(xiě)代碼時(shí),我們總是會(huì)做出一些假設(shè),斷言就是用于在代碼中捕捉這些假設(shè)。簡(jiǎn)單的來(lái)理解斷言的話(huà)就是判斷的意思。所以在Go中類(lèi)型斷言我們就可以理解成對(duì)類(lèi)型的判斷。

類(lèi)型斷言介紹

類(lèi)型斷言(Type Assertion)是一個(gè)使用在接口值上的操作,用于檢查接口類(lèi)型變量所持有的值是否實(shí)現(xiàn)了期望的接口或者具體的類(lèi)型。

在Go語(yǔ)言中類(lèi)型斷言的語(yǔ)法格式如下:

value, ok := x.(T)
登錄后復(fù)制

其中,x 表示一個(gè)接口的類(lèi)型,T 表示一個(gè)具體的類(lèi)型(也可為接口類(lèi)型)。

該斷言表達(dá)式會(huì)返回 x 的值(也就是 value)和一個(gè)布爾值(也就是 ok),可根據(jù)該布爾值判斷 x 是否為 T 類(lèi)型:

  • 如果 T 是具體某個(gè)類(lèi)型,類(lèi)型斷言會(huì)檢查 x 的動(dòng)態(tài)類(lèi)型是否等于具體類(lèi)型 T。如果檢查成功,類(lèi)型斷言返回的結(jié)果是 x 的動(dòng)態(tài)值,其類(lèi)型是 T。

  • 如果 T 是接口類(lèi)型,類(lèi)型斷言會(huì)檢查 x 的動(dòng)態(tài)類(lèi)型是否滿(mǎn)足 T。如果檢查成功,x 的動(dòng)態(tài)值不會(huì)被提取,返回值是一個(gè)類(lèi)型為 T 的接口值。

  • 無(wú)論 T 是什么類(lèi)型,如果 x 是 nil 接口值,類(lèi)型斷言都會(huì)失敗。

在Go中類(lèi)型斷言主要有兩種形式

  • 變量.(類(lèi)型)。例如:i.(int)

  • 變量,bool = 變量.(類(lèi)型)。例如:num,ok = i.(int)。ok表示判斷類(lèi)型是否成功的意思。

類(lèi)型斷言的用法

通過(guò)類(lèi)型斷言可以做到以下幾件事情

  • 檢查 i 是否為 nil

  • 檢查 i 存儲(chǔ)的值是否為某個(gè)類(lèi)型

具體的使用方式有兩種:

第一種:

t := i.(T)
登錄后復(fù)制

這個(gè)表達(dá)式可以斷言一個(gè)接口對(duì)象(i)里不是 nil,并且接口對(duì)象(i)存儲(chǔ)的值的類(lèi)型是 T,如果斷言成功,就會(huì)返回值給 t,如果斷言失敗,就會(huì)觸發(fā) panic。

來(lái)寫(xiě)段代碼試驗(yàn)一下

package main  import "fmt"  func main() {     var i interface{} = 10     t1 := i.(int)     fmt.Println(t1)      fmt.Println("=====分隔線(xiàn)=====")      t2 := i.(string)     fmt.Println(t2) }
登錄后復(fù)制

運(yùn)行后輸出如下,可以發(fā)現(xiàn)在執(zhí)行第二次斷言的時(shí)候失敗了,并且觸發(fā)了 panic

10 =====分隔線(xiàn)===== panic: interface conversion: interface {} is int, not string  goroutine 1 [running]: main.main()         E:/GoPlayer/src/main.go:12 +0x10e exit status 2
登錄后復(fù)制

如果要斷言的接口值是 nil,那我們來(lái)看看也是不是也如預(yù)期一樣會(huì)觸發(fā)panic

package main  func main() {     var i interface{} // nil     var _ = i.(interface{}) }
登錄后復(fù)制

輸出如下,確實(shí)是會(huì) 觸發(fā) panic

panic: interface conversion: interface is nil, not interface {}  goroutine 1 [running]: main.main()         E:/GoPlayer/src/main.go:5 +0x34 exit status 2
登錄后復(fù)制

第二種

t, ok:= i.(T)
登錄后復(fù)制

和上面一樣,這個(gè)表達(dá)式也是可以斷言一個(gè)接口對(duì)象(i)里不是 nil,并且接口對(duì)象(i)存儲(chǔ)的值的類(lèi)型是 T,如果斷言成功,就會(huì)返回其類(lèi)型給 t,并且此時(shí) ok 的值 為 true,表示斷言成功。

如果接口值的類(lèi)型,并不是我們所斷言的 T,就會(huì)斷言失敗,但和第一種表達(dá)式不同的事,這個(gè)不會(huì)觸發(fā) panic,而是將 ok 的值設(shè)為 false ,表示斷言失敗,此時(shí)t 為 T 的零值。

稍微修改下上面的例子,如下

package main  import "fmt"  func main() {     var i interface{} = 10     t1, ok := i.(int)     fmt.Printf("%d-%tn", t1, ok)      fmt.Println("=====分隔線(xiàn)1=====")      t2, ok := i.(string)     fmt.Printf("%s-%tn", t2, ok)      fmt.Println("=====分隔線(xiàn)2=====")      var k interface{} // nil     t3, ok := k.(interface{})     fmt.Println(t3, "-", ok)      fmt.Println("=====分隔線(xiàn)3=====")     k = 10     t4, ok := k.(interface{})     fmt.Printf("%d-%tn", t4, ok)      t5, ok := k.(int)     fmt.Printf("%d-%tn", t5, ok) }
登錄后復(fù)制

運(yùn)行后輸出如下,可以發(fā)現(xiàn)在執(zhí)行第二次斷言的時(shí)候,雖然失敗了,但并沒(méi)有觸發(fā)了 panic。

10-true =====分隔線(xiàn)1===== -false =====分隔線(xiàn)2===== <nil> - false =====分隔線(xiàn)3===== 10-true 10-true
登錄后復(fù)制

上面這段輸出,你要注意的是第二個(gè)斷言的輸出在-false 之前并不是有沒(méi)有輸出任何 t2 的值,而是由于斷言失敗,所以 t2 得到的是 string 的零值也是 "" ,它是零長(zhǎng)度的,所以你看不到其輸出。

Type Switch

如果需要區(qū)分多種類(lèi)型,可以使用 type switch 斷言,這個(gè)將會(huì)比一個(gè)一個(gè)進(jìn)行類(lèi)型斷言更簡(jiǎn)單、直接、高效。

package main  import "fmt"  func findType(i interface{}) {     switch x := i.(type) {     case int:         fmt.Println(x, "is int")     case string:         fmt.Println(x, "is string")     case nil:         fmt.Println(x, "is nil")     default:         fmt.Println(x, "not type matched")     } }  func main() {     findType(10)      // int     findType("hello") // string      var k interface{} // nil     findType(k)      findType(10.23) //float64 }
登錄后復(fù)制

輸出如下

10 is int hello is string <nil> is nil 10.23 not type matched
登錄后復(fù)制

額外說(shuō)明一下:

  • 如果你的值是 nil,那么匹配的是 case nil
  • 如果你的值在 switch-case 里并沒(méi)有匹配對(duì)應(yīng)的類(lèi)型,那么走的是 default 分支

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
久久av综合网| 丁香花在线影院观看在线播放| 亚洲av无日韩毛片久久| 精品无码av无码免费专区| 欧美日韩亚洲一二三| 凹凸国产熟女精品视频| 国产深夜男女无套内射| 黄色国产精品视频| 50路60路老熟妇啪啪| 亚洲综合欧美在线| 中文字幕超清在线免费观看| 日本一道在线观看| 国产精品久久久久久久久电影网| av日韩在线看| 丝袜老师办公室里做好紧好爽| wwwwww.色| 日韩精品一区二区三区电影| 日韩精品久久一区二区| 精品久久久久久久无码 | 欧美国产视频一区| 僵尸世界大战2 在线播放| 无码无遮挡又大又爽又黄的视频| 香港日本韩国三级网站| 操bbb操bbb| 超碰在线人人爱| 国产精品无码一区二区在线| 四虎免费在线观看视频| 日韩欧美精品在线观看视频| 97干在线视频| 欧美一级黄色录像片| 日本大胆人体视频| 久久久久久免费看| 国产成人无码精品久久久性色| a在线视频观看| 看欧美ab黄色大片视频免费| 欧美日韩亚洲第一| 亚洲精品国产suv一区88| www.亚洲视频.com| 日本免费a视频| 亚洲一区二区偷拍| 人妻熟女一二三区夜夜爱| 中文字幕乱码免费| 国产精品一二三在线观看| 欧美aaa在线观看| 国产成人亚洲综合无码| 久久久久久久久网| 午夜精品久久久内射近拍高清 | 日韩av福利在线观看| 国产内射老熟女aaaa| 免费在线观看毛片网站| 丁香婷婷激情网| 黄色高清视频网站| 丰满少妇久久久| 9999在线观看| 亚洲少妇久久久| 国产91视频一区| 日韩精品aaa| 激情内射人妻1区2区3区 | www.射射射| 日韩中文字幕二区| 国产制服91一区二区三区制服| 成人在线观看黄| 无码人妻精品一区二区三区在线| 青青草原国产在线视频| 免费观看成人网| 国内外成人激情视频| 国产片侵犯亲女视频播放| 四虎免费在线观看视频| 91高清国产视频| 欧美第一页浮力影院| 91av在线免费播放| 最新天堂在线视频| 天天干天天曰天天操| 精品人妻人人做人人爽| 国产精品国产对白熟妇| 青青草原成人网| 91av俱乐部| 国内自拍中文字幕| 黑人糟蹋人妻hd中文字幕| 毛片在线播放视频| 美女网站视频黄色| 二级片在线观看| 欧美亚洲一二三区| 国产又大又长又粗又黄| 国产二区视频在线| 91丝袜超薄交口足| 一女被多男玩喷潮视频| 91性高潮久久久久久久| 国产免费视频传媒| 97干在线视频| 99热一区二区三区| 亚洲免费看av| 可以在线看的黄色网址| 久久av秘一区二区三区| 久久精品影视大全| 毛片av在线播放| 欧美少妇一区二区三区| 成人中文字幕av| 欧美伦理视频在线观看| 国产色一区二区三区| av无码久久久久久不卡网站| 国产三级中文字幕| 咪咪色在线视频| 国产成人在线小视频| 欧美交换配乱吟粗大25p| 欧美 日韩 国产精品| 精品国偷自产一区二区三区| 成人免费播放器| 国产亚洲天堂网| 男人日女人bb视频| 91淫黄看大片| 日本成人性视频| 欧日韩免费视频| 热久久精品免费视频| 黄色a级三级三级三级| 亚洲乱码日产精品bd在线观看| 青草视频在线观看视频| 国产xxxxx在线观看| 欧洲xxxxx| 国产免费一区二区三区视频| 欧美精品 - 色网| wwwxxx黄色片| 成人一级生活片| 婷婷激情小说网| 中文字幕天天干| 人妻有码中文字幕| 久久久久久免费看| 免费的一级黄色片| 国产欧美123| 亚洲一级片免费观看| 欧美黄色性生活| 蜜臀av午夜一区二区三区 | 男人添女荫道口图片| 可以看污的网站| 青草青青在线视频| 亚洲国产精品无码观看久久| 国产av不卡一区二区| 米仓穗香在线观看| 无码粉嫩虎白一线天在线观看| 91国在线高清视频| 国产最新免费视频| 国产精品无码专区av在线播放| 黄色a级片免费| 在线观看免费的av| 一区二区三区一级片| 男女裸体影院高潮| 熟女少妇精品一区二区| 中文字幕第66页| 中文字幕无码精品亚洲35| 欧美两根一起进3p做受视频| 国产又大又黄又粗的视频| www.日本久久| 久久九九国产视频| 久草视频这里只有精品| 黑鬼大战白妞高潮喷白浆| 无码人妻精品一区二区蜜桃网站| 免费在线观看的毛片| 黄色一级片播放| 99re6这里有精品热视频| 天天色综合社区| 欧美日韩第二页| 97av视频在线观看| 可以在线看的av网站| 亚洲美免无码中文字幕在线 | 女同性恋一区二区| 成人性做爰片免费视频| 国产日韩欧美大片| 人妻无码一区二区三区四区| 女同性恋一区二区| 屁屁影院ccyy国产第一页| 免费久久久久久| 免费的av在线| 亚洲精品怡红院| www,av在线| 欧美精品久久久久久久久久久| www.xxx麻豆| 在线观看高清免费视频| 中文字幕av不卡在线| 欧美在线观看黄| av天堂永久资源网| 欧美成人手机在线视频| 欧美性猛交内射兽交老熟妇| 麻豆av免费在线| 天天久久综合网| 国产精品拍拍拍| 成人午夜精品久久久久久久蜜臀| 一区二区三区国产免费| 日本一级黄视频| 992kp免费看片| 亚洲人辣妹窥探嘘嘘| 9久久9毛片又大又硬又粗| 桥本有菜av在线| 性生活免费在线观看| 免费无码av片在线观看| 女人被男人躁得好爽免费视频 | 色哺乳xxxxhd奶水米仓惠香| 精品久久久久久无码国产| av动漫在线看| 一本大道熟女人妻中文字幕在线 | 久久黄色免费看|