在Go語言中,斷言可以通過類型斷言(Type Assertion)來實現。
類型斷言的語法形式為x.(T)
,其中x
是一個接口類型的表達式,T
是一個具體的類型。它的含義是:判斷x
是否實現了接口類型T
,如果是,則返回x
的動態值(Dynamic Value);如果不是,則會觸發一個panic異常。
下面是一個使用類型斷言的示例:
package main
import "fmt"
func main() {
var i interface{} = "Hello"
s, ok := i.(string)
if ok {
fmt.Println("i is a string:", s)
} else {
fmt.Println("i is not a string")
}
f, ok := i.(float64)
if ok {
fmt.Println("i is a float64:", f)
} else {
fmt.Println("i is not a float64")
}
}
輸出結果為:
i is a string: Hello
i is not a float64
在上述示例中,i
是一個空接口類型的變量,它保存了一個字符串。我們使用類型斷言判斷i
是否是一個字符串類型,并將結果賦值給s
和ok
。如果斷言成功(ok
為true
),則輸出i is a string
和字符串的值;如果斷言失敗(ok
為false
),則輸出i is not a string
。
需要注意的是,如果進行類型斷言時,被斷言的值并不是接口類型的變量或者是nil
,則會觸發panic異常。因此,在進行類型斷言之前,通常需要使用類型斷言的安全形式來判斷是否能夠斷言成功,即將斷言結果和一個布爾值進行結合判斷。