型別斷言(type assertion)是乙個使用在介面值上的操作,用於檢查介面型別變數所持有的值是否實現了期望的介面或者具體的型別。
在go語言中型別斷言的語法格式如下:
value, ok := x.
(t)
其中,x 表示乙個介面的型別,t 表示乙個具體的型別(也可為介面型別)。
該斷言表示式會返回 x 的值(也就是 value)和乙個布林值(也就是 ok),可根據該布林值判斷 x 是否為 t 型別:
示例**如下:
package main
import
("fmt"
)func
main()
x =10 value, ok := x.
(int
) fmt.
print
(value,
",", ok)
}
執行結果如下:
10
,true
需要注意如果不接收第二個引數也就是上面**中的 ok,斷言失敗時會直接造成乙個 panic。如果 x 為 nil 同樣也會 panic。
示例**如下:
package main
import
("fmt"
)func
main()
x ="hello"
value := x.
(int
) fmt.
println
(value)
}
執行結果如下:
panic
:inte***ce conversion:
inte***ce
is string
, not int
型別斷言還可以配合 switch 使用,示例**如下:
package main
import
("fmt"
)func
main()
func
gettype
(a inte***ce
)}
執行結果如下:
the type of a is int
Go語言型別轉換和型別斷言
型別轉換在編譯期完成,包括強制轉換和隱式轉換 型別斷言在執行時確定,包括安全型別斷言和非安全型別斷言 go語言要求不同型別之間必須做顯式的型別轉換。但似乎涉及到介面型別時,就會有所不同。兩種型別斷言 不安全的型別斷言,如果系統檢測到不匹配,會在執行時呼叫內建的panic,丟擲異常 s abc i s...
Go型別斷言
package main import fmt 型別斷言 type assertion 是乙個使用在介面值上的操作,用於檢查介面型別變數所持有的值是否實現了期望的介面或者具體的型別。如何進行型別斷言的判斷?1.使用if語句或者switch語句 2.依靠 value,ok x.t x 表示乙個介面的型...
go語言的型別斷言 Type Assertion
x.t 檢查x的動態型別是否是t,其中x必須是介面值。如果t是具體型別 型別斷言檢查x的動態型別是否等於具體型別t。如果檢查成功,型別斷言返回的結果是x的動態值,其型別是t。換句話說,對介面值x斷言其動態型別是具體型別t,若成功則提取出x的具體值。如果檢查失敗則panic。例如 var w io.w...