天天看點

Go 語言中的類型斷言是什麼?

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

Type Assertion

Type Assertion(中文名叫:類型斷言),通過它可以做到以下幾件事情

1.檢查 i 是否為 nil

2.檢查 i 存儲的值是否為某個類型

具體的使用方式有兩種:

第一種:

Go 語言中的類型斷言是什麼?

這個表達式可以斷言一個接口對象(i)裡不是 nil,并且接口對象(i)存儲的值的類型是 T,如果斷言成功,就會傳回值給 t,如果斷言失敗,就會觸發 panic。

來寫段代碼試驗一下

Go 語言中的類型斷言是什麼?

運作後輸出如下,可以發現在執行第二次斷言的時候失敗了,并且觸發了 panic

Go 語言中的類型斷言是什麼?

如果要斷言的接口值是 nil,那我們來看看也是不是也如預期一樣會觸發panic

Go 語言中的類型斷言是什麼?

輸出如下,确實是會 觸發 panic

Go 語言中的類型斷言是什麼?

第二種

Go 語言中的類型斷言是什麼?

和上面一樣,這個表達式也是可以斷言一個接口對象(i)裡不是 nil,并且接口對象(i)存儲的值的類型是 T,如果斷言成功,就會傳回其類型給 t,并且此時 ok 的值 為 true,表示斷言成功。

如果接口值的類型,并不是我們所斷言的 T,就會斷言失敗,但和第一種表達式不同的事,這個不會觸發 panic,而是将 ok 的值設為 false ,表示斷言失敗,此時t 為 T 的零值。

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

Go 語言中的類型斷言是什麼?

運作後輸出如下,可以發現在執行第二次斷言的時候,雖然失敗了,但并沒有觸發了 panic。

Go 語言中的類型斷言是什麼?

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

Type Switch

如果需要區分多種類型,可以使用 type switch 斷言,這個将會比一個一個進行類型斷言更簡單、直接、高效。

Go 語言中的類型斷言是什麼?

輸出如下

Go 語言中的類型斷言是什麼?

額外說明一下:

  • 如果你的值是 nil,那麼比對的是 case nil
  • 如果你的值在 switch-case 裡并沒有比對對應的類型,那麼走的是 default 分支

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/live

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-05-11

本文作者:王一白

本文來自:“

掘金

”,了解相關資訊可以關注“掘金”