在Go語(yǔ)言中,斷言可以通過(guò)類型斷言(Type Assertion)來(lái)實(shí)現(xiàn)。
類型斷言的語(yǔ)法形式為x.(T)
,其中x
是一個(gè)接口類型的表達(dá)式,T
是一個(gè)具體的類型。它的含義是:判斷x
是否實(shí)現(xiàn)了接口類型T
,如果是,則返回x
的動(dòng)態(tài)值(Dynamic Value);如果不是,則會(huì)觸發(fā)一個(gè)panic異常。
下面是一個(gè)使用類型斷言的示例:
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")
}
}
輸出結(jié)果為:
i is a string: Hello
i is not a float64
在上述示例中,i
是一個(gè)空接口類型的變量,它保存了一個(gè)字符串。我們使用類型斷言判斷i
是否是一個(gè)字符串類型,并將結(jié)果賦值給s
和ok
。如果斷言成功(ok
為true
),則輸出i is a string
和字符串的值;如果斷言失敗(ok
為false
),則輸出i is not a string
。
需要注意的是,如果進(jìn)行類型斷言時(shí),被斷言的值并不是接口類型的變量或者是nil
,則會(huì)觸發(fā)panic異常。因此,在進(jìn)行類型斷言之前,通常需要使用類型斷言的安全形式來(lái)判斷是否能夠斷言成功,即將斷言結(jié)果和一個(gè)布爾值進(jìn)行結(jié)合判斷。