
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 mainimport "fmt"func main() {var i interface{} = "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) // panicfmt.Println(f)
}