Go型別斷言

2021-10-06 11:55:53 字數 1393 閱讀 3928

package main

import

"fmt"

//型別斷言(type assertion)是乙個使用在介面值上的操作,用於檢查介面型別變數所持有的值是否實現了期望的介面或者具體的型別。

//如何進行型別斷言的判斷?

//1.使用if語句或者switch語句

//2.依靠 value, ok := x.(t)

//x 表示乙個介面的型別,

//t 表示乙個具體的型別(也可為介面型別)。

//value 表示對應介面的值

//ok 表示對應的狀態 true/false

//如果 t 是具體某個型別,型別斷言會檢查 x 的動態型別是否等於具體型別 t。如果檢查成功,型別斷言返回的結果是 x 的動態值,其型別是 t。

//如果 t 是介面型別,型別斷言會檢查 x 的動態型別是否滿足 t。如果檢查成功,x 的動態值不會被提取,返回值是乙個型別為 t 的介面值。

//無論 t 是什麼型別,如果 x 是 nil 介面值,型別斷言都會失敗。

//簡單舉例

func

main()

x =10 s =

"hello"

value, ok := x.

(int

) fmt.

print

(value,

",", ok)

//10,true

values, oks := s.

(int

) fmt.

print

(values,

",", oks)

//0,false 需要注意如果不接收第二個引數也就是上面**中的 ok,斷言失敗時會直接造成乙個 panic。如果 x 為 nil 同樣也會 panic。

}// 1.if判斷斷言舉例

//type person struct

////func main() , 3)

// i[0] = 666

// i[1] = "hello go"

// i[2] = person

// for index, x := range i else if value, ok := x.(string); ok == true else if value, ok := x.(person); ok == true

// }

//}// 2.switch判斷斷言

//func main() , 3)

// i[0] = 666

// i[1] = "hello go"

// i[2] = person

// for index, x := range i

// }

//}

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 型別斷言 (57)介面的型別斷言

go提供了乙個方法,用來判斷介面的底層值是什麼型別 型別斷言提供了訪問介面值底層具體值的方式。t i.t 該語句斷言介面值i儲存了具體型別t,並將其底層型別為t的值賦予變數t。若i並未儲存t型別的值,該語句就會觸發乙個panic。為了判斷乙個介面值是否儲存了乙個特定的型別,型別斷言可返回兩個值 其底...

Go之斷言型別 assert type

1.背景介紹 筆者最近在使用乙個資料結構實現多個介面,但是卻發現想要在一段時間內轉換成介面1,另外一段時間轉換成介面2,所以也就使用到了斷言型別。在看過斷言型別之後,覺得還是很有必要講一講這個斷言型別,於是便有了這篇文章。2.斷言型別介紹 介面型別提供一種,將介面型別轉換成具體型別的轉換方法,也就是...