真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

golang中有哪些斷言類型

今天就跟大家聊聊有關(guān)golang中有哪些斷言類型,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)主營(yíng)旌德網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),旌德h5成都小程序開發(fā)搭建,旌德網(wǎng)站營(yíng)銷推廣歡迎旌德等地區(qū)企業(yè)咨詢

1)語(yǔ)法一

t := i.(T)

解釋說(shuō)明:

T:表示的是具體的數(shù)據(jù)類型,i:表示的是接口變量i,t:表示的是轉(zhuǎn)換之后的變量。

功能介紹

這個(gè)語(yǔ)句實(shí)現(xiàn)的功能是:將接口變量i按照類型T轉(zhuǎn)換成t,其中t中的值是i轉(zhuǎn)換得來(lái)的,一旦轉(zhuǎn)換不成功就會(huì)觸發(fā)一個(gè)panic。

2)除此之外還有另外一個(gè)寫法:

t, ok := i.(T)

功能介紹:

表達(dá)式里面多了一個(gè)ok,實(shí)現(xiàn)的功能是:將接口i按照類型T轉(zhuǎn)換成t,如果類型匹配ok=true,如果類型不匹配,ok=false。改語(yǔ)句不會(huì)觸發(fā)panic。

3)例子如下所示:

package main
import "fmt"
func main() {  var i interface{} = "hello world"
 str := i.(string) // 1.接口i是string類型,會(huì)將"hello world"賦值給str  fmt.Println(str)
 s, ok := i.(string) // 2.接口類型是string,會(huì)將"hello world"賦值給s,并且ok=true  fmt.Println(s, ok)
 idx, ok := i.(int) // 3.接口類型不是int,ok=false,idx不會(huì)從i獲取到數(shù)值  fmt.Println(idx, ok)    idx = i.(int) // 4.接口i不是int類型,會(huì)觸發(fā)panic  fmt.Println(idx)}

Output:

hello worldhello world true0 falsepanic: interface conversion: interface {} is string, not int
goroutine 1 [running]:main.main()  /tmp/sandbox277669744/prog.go:17 +0x1f4

3.斷言類型的使用場(chǎng)景:

1)T的類型是具體類型

類型斷言檢查x的動(dòng)態(tài)類型是否等于具體類型T。如果檢查成功,類型斷言返回的結(jié)果是x的動(dòng)態(tài)值,其類型是T。

例子可以參考2中的例子,并無(wú)特別的不同之處。

2)T的類型是接口類型

類型斷言檢查x的動(dòng)態(tài)類型是否滿足T。如果檢查成功,x的動(dòng)態(tài)值不會(huì)被提取,返回值是一個(gè)類型為T的接口值。換句話說(shuō),到接口類型的類型斷言,改變了表達(dá)式的類型,改變了(通常是擴(kuò)大了)可以訪問的方法,且保護(hù)了接口值內(nèi)部的動(dòng)態(tài)類型和值。

例子:

package main
import (    "fmt")
type I interface {    walk()}type J interface {    fly()}type A struct{}
func (a A) walk() {    fmt.Println("walk!")}func (a A) fly() {    fmt.Println("fly!")}func main() {    var i I    i = A{}  // dynamic type of i is A    fmt.Printf("%T\n", i.(A))    // i.fly()  // 報(bào)錯(cuò):./prog.go:26:6: i.fly undefined (type I has no field or method fly)    var j J    j = i.(J) // 這里將i中的值轉(zhuǎn)換成接口J這一個(gè)類型    fmt.Printf("%T\n", j)    j.fly()}

Output:

main.Amain.Afly!

看完上述內(nèi)容,你們對(duì)golang中有哪些斷言類型有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


名稱欄目:golang中有哪些斷言類型
當(dāng)前網(wǎng)址:http://weahome.cn/article/psohjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部