go提供了乙個方法,用來判斷介面的底層值是什麼型別
型別斷言提供了訪問介面值底層具體值的方式。
t := i.(t)
該語句斷言介面值i
儲存了具體型別t
,並將其底層型別為t
的值賦予變數t
。
若i
並未儲存t
型別的值,該語句就會觸發乙個panic。
為了判斷乙個介面值是否儲存了乙個特定的型別,型別斷言可返回兩個值:其底層值以及乙個報告斷言是否成功的布林值。
t, ok := i.(t)
若i
儲存了乙個t
,那麼t
將會是其底層值,而ok
為true
。
否則,ok
將為false
而t
將為t
型別的零值,程式並不會產生panic。
請注意這種語法和讀取乙個map時的相同之處。
**:
package main
import "fmt"
func main() = "hello"
s := i.(string)
fmt.println(s)
s, ok := i.(string)
fmt.println(s, ok)
f, ok := i.(float64)
fmt.println(f, ok)
f = i.(float64) // panic
fmt.println(f)
}
Go型別斷言
package main import fmt 型別斷言 type assertion 是乙個使用在介面值上的操作,用於檢查介面型別變數所持有的值是否實現了期望的介面或者具體的型別。如何進行型別斷言的判斷?1.使用if語句或者switch語句 2.依靠 value,ok x.t x 表示乙個介面的型...
Go之型別斷言
一 由於介面是基本型別,不知道具體型別,如果要轉成具體型別需要使用型別斷言 package main import fmt type dy struct func main var dy dy dy i1 dy var i2 dy dy i1 會報錯 型別斷言才能把介面轉為具體型別 i2 i1.dy...
Go之斷言型別 assert type
1.背景介紹 筆者最近在使用乙個資料結構實現多個介面,但是卻發現想要在一段時間內轉換成介面1,另外一段時間轉換成介面2,所以也就使用到了斷言型別。在看過斷言型別之後,覺得還是很有必要講一講這個斷言型別,於是便有了這篇文章。2.斷言型別介紹 介面型別提供一種,將介面型別轉換成具體型別的轉換方法,也就是...