golang中的所有程序都實(shí)現(xiàn)了interface{}的接口腻贰,這意味著掂之,所有的類型如string,int,int64甚至是自定義的struct類型都就此擁有了interface{}的接口梯皿,這種做法和java中的Object類型比較類似。那么在一個(gè)數(shù)據(jù)通過func funcName(interface{})的方式傳進(jìn)來的時(shí)候,也就意味著這個(gè)參數(shù)被自動(dòng)的轉(zhuǎn)為interface{}的類型余赢。如果我們要返回這個(gè)interface{}變量,如下代碼:
func funcName(a interface{}) string {
return string(a)
}
就會(huì)報(bào)錯(cuò):cannot convert a (type interface{}) to type string: need type assertion
不能直接將interface{}類型轉(zhuǎn)為string哈垢,需要斷言
func Test(a interface{}) string {
value, ok := a.(string)
if !ok {
fmt.Println("It's not ok for type string",value)
return
}
return value
}
func main(){
a:="abcd"
c1:=Test(a)
b:=123
c2:=Test(b)
fmt.Println(c1,c2)
}