雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
Type Assertion
Type Assertion(中文名叫:類型斷言),通過它可以做到以下幾件事情
1.檢查 i 是否為 nil
2.檢查 i 存儲的值是否為某個類型
具體的使用方式有兩種:
第一種:

這個表達式可以斷言一個接口對象(i)裡不是 nil,并且接口對象(i)存儲的值的類型是 T,如果斷言成功,就會傳回值給 t,如果斷言失敗,就會觸發 panic。
來寫段代碼試驗一下
運作後輸出如下,可以發現在執行第二次斷言的時候失敗了,并且觸發了 panic
如果要斷言的接口值是 nil,那我們來看看也是不是也如預期一樣會觸發panic
輸出如下,确實是會 觸發 panic
第二種
和上面一樣,這個表達式也是可以斷言一個接口對象(i)裡不是 nil,并且接口對象(i)存儲的值的類型是 T,如果斷言成功,就會傳回其類型給 t,并且此時 ok 的值 為 true,表示斷言成功。
如果接口值的類型,并不是我們所斷言的 T,就會斷言失敗,但和第一種表達式不同的事,這個不會觸發 panic,而是将 ok 的值設為 false ,表示斷言失敗,此時t 為 T 的零值。
稍微修改下上面的例子,如下
運作後輸出如下,可以發現在執行第二次斷言的時候,雖然失敗了,但并沒有觸發了 panic。
上面這段輸出,你要注意的是第二個斷言的輸出在-false 之前并不是有沒有輸出任何 t2 的值,而是由于斷言失敗,是以 t2 得到的是 string 的零值也是 "" ,它是零長度的,是以你看不到其輸出。
Type Switch
如果需要區分多種類型,可以使用 type switch 斷言,這個将會比一個一個進行類型斷言更簡單、直接、高效。
輸出如下
額外說明一下:
- 如果你的值是 nil,那麼比對的是 case nil
- 如果你的值在 switch-case 裡并沒有比對對應的類型,那麼走的是 default 分支
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/live立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-05-11
本文作者:王一白
本文來自:“
掘金”,了解相關資訊可以關注“掘金”