日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Go 知识点(13) — 如何判断变量类型

發(fā)布時(shí)間:2023/11/28 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 知识点(13) — 如何判断变量类型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Go 語言中可以使用類型斷言來判斷變量的類型,類型斷言的使用有兩種方式:

  • 返回兩個(gè)值,分別是斷言為設(shè)置類型后的值和斷言成功的標(biāo)志符;
  • 返回一個(gè)值,表示斷言為設(shè)置類型的值;

1. 返回單個(gè)值的使用

1.1 斷言成功

如下代碼,假如我們無法判斷變量 a 的類型,可以使用下面的斷言方式

func main() {a := []int{1, 2, 3}value := interface{}(a).([]int)fmt.Printf("value is %#v\n", value)	// value is []int{1, 2, 3}
}

其中 interface{}(a) 表示將 a 轉(zhuǎn)換為接口類型,如果修改為以下語句

value := (a).([]int)

會(huì)報(bào)錯(cuò)誤

invalid type assertion: a.([]int) (non-interface type []int on left)

意思是說 a 是非接口類型。

1.2 斷言失敗

看下面代碼,如果我們將變量 a 斷言為 int 那么會(huì)發(fā)生什么情況呢?

func main() {a := []int{1, 2, 3}value := interface{}(a).(int)fmt.Printf("value is %#v\n", value)
}

輸出結(jié)果為:

panic: interface conversion: interface {} is []int, not int

觸發(fā) panic 原因是斷言 aint ,但實(shí)際上 a[]int ,所以觸發(fā)異常。

那怎樣避免這種 panic 呢? 接著往下看

2. 返回多個(gè)值的使用

在這一小節(jié),我們使用返回的兩個(gè)值來判斷斷言是否成功。

func main() {a := []int{1, 2, 3}value, ok := interface{}(a).(int)if ok {fmt.Printf("value is %#v\n", value)} else {fmt.Println("斷言失敗, value is ", value)}
}

其中 OK 表示斷言結(jié)果的 bool 值,代碼輸出結(jié)果為:

斷言失敗, value is  0

在這里如果斷言失敗后,此時(shí)的 value 值為斷言類型的零值,此處為 int 的零值。

3. 要斷言的變量類型不確定

有這么一種情況是如果要斷言的類型不確定,即變量的類型有可能是好幾種類型中的一種,那么我們該如何應(yīng)對呢?

使用 switch 語句可以幫助我們更好的做這個(gè)事情。

func main() {a := []int{1, 2, 3}// value, ok := interface{}(a).(int)switch t := interface{}(a).(type) {case int:fmt.Println("type is int")case string:fmt.Println("type is string")default:fmt.Printf("other type %T\n", t)}
}

注意 interface{}(a).(type) 此處使用的是 .(type) ,并且 .(type) 只能用于 switch 語句中。

總結(jié)

以上是生活随笔為你收集整理的Go 知识点(13) — 如何判断变量类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。