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一区二区
九九九九九国产| 永久免费网站视频在线观看| 天天干天天草天天| 成年女人18级毛片毛片免费 | 黑人巨大国产9丨视频| 亚洲国产精品久久久久爰色欲| 五月天激情播播| 国产原创popny丨九色| 青少年xxxxx性开放hg| 成人亚洲视频在线观看| 欧美一级欧美一级| 手机看片日韩国产| 午夜免费福利视频在线观看| 浮妇高潮喷白浆视频| 一级特黄妇女高潮| 中文字幕12页| av免费一区二区| 国产免费又粗又猛又爽| www.中文字幕在线| 精品无码一区二区三区在线| 国产精品av免费观看| 国产日本欧美在线| 国产乱叫456| 加勒比av中文字幕| 久久久久久久久久一区| 午夜激情av在线| 日本久久久久久久久久久久| 国产精彩免费视频| 天堂在线资源视频| av污在线观看| 高潮一区二区三区| 婷婷激情综合五月天| 亚洲av无日韩毛片久久| 在线播放黄色av| 秋霞在线一区二区| 99在线精品免费视频| 成人毛片一区二区| 免费看黄在线看| 日韩人妻精品无码一区二区三区| 九色在线视频观看| 天天操天天爱天天爽| 日韩一级免费片| 伊人成人免费视频| 草草草视频在线观看| 蜜桃网站在线观看| 怡红院av亚洲一区二区三区h| 国模吧无码一区二区三区| 黄色片久久久久| 五月婷婷之婷婷| av一区二区三区免费观看| 日韩精品一区在线视频| 色综合av综合无码综合网站| 在线免费视频一区| 国产成人一二三区| 国产精品少妇在线视频| 热久久久久久久久| 成人在线视频一区二区三区| 亚洲熟妇av一区二区三区| 亚洲男人天堂av在线| 无码 制服 丝袜 国产 另类| 亚洲色图38p| 日本a在线天堂| 亚洲老女人av| 免费av手机在线观看| 三级a三级三级三级a十八发禁止| 亚洲制服中文字幕| 日本久久久精品视频| 小说区视频区图片区| 九色在线视频观看| 国产av第一区| 欧美精品第三页| 中国丰满熟妇xxxx性| 黄大色黄女片18第一次| 国产青青在线视频| 中国一级大黄大黄大色毛片| 日韩中文字幕免费在线| 农民人伦一区二区三区| 99日在线视频| 美女喷白浆视频| 久久精品国产sm调教网站演员| 国产成人美女视频| 天天天干夜夜夜操| 91免费视频网站在线观看| 日韩视频 中文字幕| 国产欧美一区二| 三年中国国语在线播放免费| 国产乱子伦农村叉叉叉| 992tv快乐视频| 男同互操gay射视频在线看| 久久久久久久久久一区二区| 免费看a级黄色片| 日韩中文字幕组| 亚洲中文字幕无码中文字| 99久久免费观看| 青青草视频在线视频| 午夜天堂在线视频| 三年中文在线观看免费大全中国| 午夜激情av在线| 最新免费av网址| 操人视频免费看| 三级黄色片播放| 三级在线免费观看| 国产精品久久国产| 2018中文字幕第一页| h无码动漫在线观看| 少妇人妻大乳在线视频| 91成人在线观看喷潮教学| 欧美精品一区免费| 欧美在线观看视频网站| 亚洲成人福利在线观看| 中文字幕国产免费| 午夜激情影院在线观看| 桥本有菜av在线| 奇米影视亚洲色图| 国产裸体舞一区二区三区| 国产裸体免费无遮挡| 亚洲欧美日本一区二区三区| 婷婷激情综合五月天| 欧美这里只有精品| 青青在线视频观看| 在线播放av中文字幕| 一区中文字幕在线观看| 日韩国产一级片| 黄色一级二级三级| 中文字幕第一页亚洲| 日本韩国欧美在线观看| 欧美伦理片在线观看| 精品国产一区二区三区在线| 99久久国产综合精品五月天喷水| 精品国产成人av在线免| 91欧美一区二区三区| 欧美在线一区视频| 天天干天天操天天做| 日韩成人三级视频| 自拍偷拍一区二区三区四区| 17c丨国产丨精品视频| av视屏在线播放| 日本黄色片一级片| 在线观看国产福利| 日本www在线播放| 水蜜桃在线免费观看| 亚洲综合在线网站| 亚洲精品无码国产| 国产无遮挡猛进猛出免费软件 | 草草草视频在线观看| 色悠悠久久综合网| 黄色免费视频大全| 日韩欧美一级在线| 在线观看免费污视频| 日韩精品视频久久| 国产一区二区四区| 欧美xxxx吸乳| 9l视频白拍9色9l视频| 精品国产免费av| 性高湖久久久久久久久aaaaa| 肉色超薄丝袜脚交| 午夜剧场在线免费观看| 手机看片福利日韩| 国产a级片免费观看| 国产午夜福利视频在线观看| 日韩在线视频在线| 无码人妻精品一区二区蜜桃百度| 免费精品99久久国产综合精品应用| 777米奇影视第四色| 成人中文字幕在线播放| 水蜜桃色314在线观看| 欧美黑人在线观看| 无码av天堂一区二区三区| 久久www视频| 免费视频爱爱太爽了| a级黄色小视频| 熟女少妇在线视频播放| 人人妻人人澡人人爽欧美一区双| 欧美aaa在线观看| 蜜臀在线免费观看| 阿v天堂2018| 国产av无码专区亚洲精品| 国产精彩免费视频| 黄色一级片免费的| 强伦女教师2:伦理在线观看| 成人手机在线播放| 国产精品专区在线| 日韩无套无码精品| 激情黄色小视频| 丰满人妻一区二区三区53号| av网站大全免费| 日韩在线xxx| 婷婷激情5月天| 国产亚洲黄色片| av免费中文字幕| 亚洲精品国产久| 久久精品无码中文字幕| 日韩在线xxx| 日本女人高潮视频| 成人免费观看cn| 老司机久久精品| 国产手机免费视频| 999精品视频在线| 久久男人资源站| 久久国产这里只有精品|