婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Golang斷言判斷值類(lèi)型的實(shí)現(xiàn)方法

Golang斷言判斷值類(lèi)型的實(shí)現(xiàn)方法

熱門(mén)標(biāo)簽:上海極信防封電銷(xiāo)卡價(jià)格 寧波語(yǔ)音外呼系統(tǒng)公司 宿遷便宜外呼系統(tǒng)代理商 鄭州智能語(yǔ)音電銷(xiāo)機(jī)器人價(jià)格 重慶慶云企業(yè)400電話(huà)到哪申請(qǐng) 湛江crm外呼系統(tǒng)排名 仙桃400電話(huà)辦理 地圖標(biāo)注免費(fèi)定制店 不封卡外呼系統(tǒng)

Golang可以通過(guò)斷言,判斷值的類(lèi)型

s:="hello world"
i:=interface{}(s)//將數(shù)值轉(zhuǎn)化為interface空接口類(lèi)型
//需要注意的是,必須是空接口類(lèi)型才能使用斷言,如果不是空接口類(lèi)型會(huì)報(bào)錯(cuò)
//Invalid type assertion: a.(string) (non-interface type string on left)
v,e:=i.(string)//返回value和error值,當(dāng)err值為true則轉(zhuǎn)化成功,value的值為括號(hào)中的值類(lèi)型,當(dāng)err值為false,則轉(zhuǎn)化不成功

也可以通過(guò)反射判斷值的類(lèi)型

name:="test"
t:=relfect.TypeOf(name)
fmt.Println(t)//通過(guò)反射確定值的類(lèi)型

類(lèi)型斷言是什么,類(lèi)型斷言和類(lèi)型轉(zhuǎn)換有什么區(qū)別,這個(gè)問(wèn)題以前我也常常分不清楚。為了幫助和我有一樣疑問(wèn)的人,我決定得寫(xiě)一篇關(guān)于這方面的博文,介紹一下golang中的類(lèi)型斷言和類(lèi)型轉(zhuǎn)換的區(qū)別,在JavaScript的超集Typescript里,也同樣有類(lèi)型斷言的概念。這篇簡(jiǎn)短的博文就是幫助大家解答這個(gè)疑問(wèn),我會(huì)盡量短的說(shuō)清楚,我理解的類(lèi)型轉(zhuǎn)換和類(lèi)型斷言的區(qū)別是什么。

什么是類(lèi)型轉(zhuǎn)換

類(lèi)型轉(zhuǎn)換在很多靜態(tài)類(lèi)型的語(yǔ)言中都會(huì)有的概念,類(lèi)型轉(zhuǎn)換通常分為顯示類(lèi)型轉(zhuǎn)換和隱式類(lèi)型轉(zhuǎn)換。強(qiáng)制類(lèi)型轉(zhuǎn)換形如:

f := 11.22
i := int(f)

例如有個(gè)float32的變量被賦值為11.22,現(xiàn)在我們想去掉小數(shù)部分,最簡(jiǎn)單的方法就是將float32轉(zhuǎn)換為int32。

簡(jiǎn)單來(lái)說(shuō),強(qiáng)制類(lèi)型轉(zhuǎn)換就是你要從一個(gè)類(lèi)型強(qiáng)制轉(zhuǎn)換到另一個(gè)類(lèi)型。適用于一些基本類(lèi)型,比如int, float之類(lèi)等等。但在golang中,類(lèi)型匹配是相當(dāng)嚴(yán)格的,很多時(shí)候編譯器不會(huì)幫你去做,所以大多數(shù)的情況下,我們還是會(huì)做一些顯示的類(lèi)型轉(zhuǎn)換。

比如這段看起來(lái)在其它靜態(tài)類(lèi)型語(yǔ)言中毫無(wú)問(wèn)題的代碼片段,在golang中編譯期就會(huì)報(bào)錯(cuò),golang會(huì)強(qiáng)制讓你做類(lèi)型轉(zhuǎn)換。

var i int = 1
var f float64 = i

接下來(lái)看看隱式的類(lèi)型轉(zhuǎn)換。golang中的隱式類(lèi)型轉(zhuǎn)換主要存在于運(yùn)行時(shí)。比如:

var w io.Writer = os.Stdout

這里將*File類(lèi)型賦值給了io.Writer類(lèi)型,在運(yùn)行時(shí)會(huì)做一個(gè)隱式的類(lèi)型轉(zhuǎn)換。

什么是斷言

在了解什么是類(lèi)型斷言之前,先來(lái)了解一下斷言是什么

這是尼克楊嗎?

簡(jiǎn)而言之,斷言就是對(duì)一種條件進(jìn)行假設(shè),如果這是尼克楊,那么我要要干嘛?如果這不是尼克楊又怎樣?
隨之,類(lèi)型斷言就是對(duì)類(lèi)型進(jìn)行一種假設(shè)。

這里拿Typescript來(lái)說(shuō)個(gè)事,在TS里我們很多時(shí)候會(huì)用到一種類(lèi)型叫聯(lián)合類(lèi)型,聯(lián)合類(lèi)型A | B可以理解為它可以是A類(lèi)型或者是B類(lèi)型。實(shí)際例子:

let zhangsan:Student | null //表示zhangsan是一個(gè)Student或者null類(lèi)型

我們需要使用zhangsan的時(shí)候,可以使用類(lèi)型斷言

if(zhangsan) zs = Student>zhangsan
//或者
if(zhangsan) zs = zhangsan as Student

在golang中的類(lèi)型斷言和Typescript中的第二種類(lèi)型斷言比較相像。在golang中形如

x.(T)

x是一種接口類(lèi)型,T可以是一種具體的類(lèi)型也可以是一種接口類(lèi)型

golang為什么需要類(lèi)型斷言

為此,我們思考一個(gè)問(wèn)題,為什么Golang需要類(lèi)型斷言,golang中對(duì)類(lèi)型的要求十分嚴(yán)格,而且golang中也沒(méi)有Typescript中的聯(lián)合類(lèi)型,好像一切類(lèi)型都是固定不變的,有了強(qiáng)制轉(zhuǎn)換類(lèi)型,為什么還需要類(lèi)型斷言呢?

在Golang中,接口類(lèi)型是能夠隱式轉(zhuǎn)換的。看一個(gè)具體的例子:

var w io.Writer = os.Stdout

w的類(lèi)型為io.Writer,但是它被賦值了*File,這是Golang幫助我們做了一次類(lèi)型轉(zhuǎn)換。這次類(lèi)型轉(zhuǎn)換是在運(yùn)行時(shí)的,編譯時(shí)并不能確定下來(lái)。在運(yùn)行時(shí),這個(gè)接口值的類(lèi)型被賦值為了*File,與此同時(shí),值也被賦值為了os.Stdout。

上述說(shuō)明了一個(gè)問(wèn)題,接口值的類(lèi)型是不固定的!因?yàn)樗念?lèi)型是要在運(yùn)行時(shí)才能確定下來(lái),這需要看它的動(dòng)態(tài)值的類(lèi)型才能確定。這就是需要類(lèi)型斷言的原因了。

再看一個(gè)具體的例子

var w io.Writer = os.Stdout

這條語(yǔ)句執(zhí)行過(guò)后,w只會(huì)擁有write方法,但是原本的*File不止擁有write方法,應(yīng)該還擁有read方法,同時(shí),它也是io.ReadWriter接口的一個(gè)實(shí)例。如果這時(shí)候我們想使用read方法怎么辦,那就需要類(lèi)型斷言了。

rw := w.(io.ReadWriter)

這里將w斷言為ReadWriter類(lèi)型。斷言類(lèi)型為一個(gè)接口。暴露了*File的read和write方法

類(lèi)型斷言的檢查機(jī)制是怎樣的

于是我們想了解Golang的類(lèi)型斷言的檢查機(jī)制是怎樣的,換句話(huà)說(shuō),Golang到底是如何來(lái)判斷斷言是否成功的。

首先明確的是x必須為一個(gè)接口類(lèi)型,而T可以是一個(gè)具體的類(lèi)型也可以是一個(gè)接口類(lèi)型。下面我們分情況討論。

1.當(dāng)T為一個(gè)接口類(lèi)型時(shí)

當(dāng)T為一個(gè)接口時(shí),首先會(huì)判斷x的動(dòng)態(tài)值是否符合T這個(gè)接口,如果符合的話(huà),斷言成功,反之?dāng)嘌允。瑪嘌允r(shí)會(huì)拋出一個(gè)panic異常。但是如果類(lèi)型斷言出現(xiàn)在一個(gè)預(yù)期有兩個(gè)結(jié)果的賦值操作中,那么斷言失敗不會(huì)拋出panic異常,而是用一個(gè)bool值標(biāo)識(shí)是否斷言成功。

var w io.Writer = os.Stdout 
b, ok := w.(*bytes.Buffer) 

為了健壯性,我們應(yīng)該對(duì)ok返回的結(jié)果進(jìn)行處理。標(biāo)識(shí)是否斷言成功。

var w io.Writer = os.Stdout 
if b, ok := w.(*bytes.Buffer);!ok {
  fmt.Fprintf(os.Stderr, "斷言失敗")
} else {
  //TODO
}

對(duì)一個(gè)接口類(lèi)型的類(lèi)型斷言改變了類(lèi)型的表述方式,改變了可以獲取的方法集合(通常更大),但是它保護(hù)了接口值內(nèi)部的動(dòng)態(tài)類(lèi)型和值的部分(Go Programing Language)

當(dāng)T為一個(gè)具體類(lèi)型時(shí)

當(dāng)T為一個(gè)具體類(lèi)型時(shí),會(huì)先檢查x的動(dòng)態(tài)值的類(lèi)型是否為T(mén),如果為T(mén)則斷言成功,如果不為T(mén),則斷言失敗。

具體類(lèi)型的類(lèi)型斷言從它的操作對(duì)象中獲得具體的值(Go Programing Language)

當(dāng)x為nil

最后再簡(jiǎn)單的說(shuō)一下x為nil的情況,當(dāng)x為nil時(shí),那么不論斷言類(lèi)型是任何類(lèi)型,都會(huì)斷言失敗

到此這篇關(guān)于Golang斷言判斷值類(lèi)型的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Golang斷言判斷值類(lèi)型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 淺談golang類(lèi)型斷言,失敗類(lèi)型斷言返回值問(wèn)題
  • golang之反射和斷言的具體使用

標(biāo)簽:電子產(chǎn)品 物業(yè)服務(wù) 遼寧 西雙版納 青海 安康 儋州 海南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang斷言判斷值類(lèi)型的實(shí)現(xiàn)方法》,本文關(guān)鍵詞  Golang,斷言,判斷,值,類(lèi)型,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang斷言判斷值類(lèi)型的實(shí)現(xiàn)方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Golang斷言判斷值類(lèi)型的實(shí)現(xiàn)方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲精品在线网站| 在线看一区二区| 日韩高清不卡在线| 欧美日韩三级一区| 国产精品99久久久| 亚洲综合另类小说| 精品久久久久久久久久久久久久久| 91玉足脚交白嫩脚丫在线播放| 91麻豆精品国产自产在线 | 狠狠网亚洲精品| 日韩女优电影在线观看| 国产亚洲综合色| 免费在线观看一区| 欧美一区二区精品| 视频在线在亚洲| 欧美刺激午夜性久久久久久久| 天堂影院一区二区| 亚洲精品在线电影| 日韩国产在线观看一区| 成人免费高清在线观看| 欧美成人一区二区三区| 亚洲三级电影网站| 国产成人在线观看免费网站| 久久精品这里都是精品| 在线观看不卡一区| 亚洲国产成人自拍| 欧美一级久久久久久久大片| 亚洲一区二区3| 美女诱惑一区二区| 91在线小视频| 国产精品嫩草影院com| 乱中年女人伦av一区二区| 久久亚洲一区二区三区明星换脸 | 国产精品一卡二卡在线观看| 91猫先生在线| 亚洲男人都懂的| 91老师国产黑色丝袜在线| 麻豆91精品91久久久的内涵| 亚洲综合色视频| 日本一区二区免费在线| 26uuu久久综合| 日韩午夜精品视频| 欧美xxxx老人做受| 久久久精品免费免费| 精品盗摄一区二区三区| 欧美精品精品一区| 欧美成人aa大片| 久久久九九九九| 日韩视频一区在线观看| 美女在线观看视频一区二区| 综合精品久久久| 国产精品―色哟哟| 一区二区三区日韩欧美精品| 日韩欧美一级二级三级| 色综合天天综合狠狠| 成人国产视频在线观看| 亚洲一卡二卡三卡四卡| 国精产品一区一区三区mba桃花 | 国产精品77777竹菊影视小说| 亚洲欧洲精品天堂一级| 亚洲免费观看高清在线观看| 日韩精品成人一区二区三区| 韩国精品主播一区二区在线观看 | 五月综合激情网| 精品无人码麻豆乱码1区2区 | 精品一区二区在线观看| 成人免费视频免费观看| 在线视频中文字幕一区二区| 666欧美在线视频| 国产午夜精品久久久久久久| 视频一区视频二区在线观看| 国产福利视频一区二区三区| 国产999精品久久| 精品婷婷伊人一区三区三| 欧美性猛交xxxxxx富婆| 日韩亚洲欧美高清| 国产精品素人视频| 日韩福利视频网| 91在线视频网址| 欧美日韩在线免费视频| 久久亚洲一级片| 日韩高清欧美激情| 欧美日韩一二三区| 久久久午夜电影| 日韩在线卡一卡二| 成人亚洲一区二区一| 91在线免费视频观看| 色综合久久久久综合| 欧美日韩三级在线| 国产亚洲一区二区三区在线观看| 国内精品写真在线观看| 中文字幕一区二区三区不卡| 欧美人与性动xxxx| 亚洲成人中文在线| 精品一二三四区| 一区二区中文视频| 国产99精品国产| 婷婷亚洲久悠悠色悠在线播放| 欧美性一区二区| 成人性视频网站| 无吗不卡中文字幕| 2021国产精品久久精品| 色8久久精品久久久久久蜜| 日韩电影免费在线| 日韩久久一区二区| 国产亚洲一二三区| 7777精品伊人久久久大香线蕉超级流畅 | 国产乱码精品一品二品| 午夜久久久久久| 依依成人综合视频| 国产精品污网站| 久久久噜噜噜久久中文字幕色伊伊 | 4438x成人网最大色成网站| 午夜在线电影亚洲一区| 欧美xxxx老人做受| 色婷婷av一区二区三区gif| 国产精品另类一区| 欧美日韩久久一区| 国产精品自拍三区| 亚洲精品午夜久久久| 欧美一级电影网站| 成人av第一页| 精品亚洲porn| 国产在线视视频有精品| 国产在线观看一区二区| 国模大尺度一区二区三区| 成人高清视频在线观看| 99久久免费精品高清特色大片| 粗大黑人巨茎大战欧美成人| 精品综合久久久久久8888| 亚洲h在线观看| 日韩经典中文字幕一区| 亚洲免费伊人电影| 亚洲免费av高清| 国产农村妇女毛片精品久久麻豆| 日韩欧美色电影| 亚洲成va人在线观看| 亚洲精选免费视频| 成人免费毛片app| 日韩视频在线观看一区二区| 国产性天天综合网| 亚洲四区在线观看| 麻豆精品视频在线观看免费| 国产一区视频导航| 老司机免费视频一区二区| 激情五月婷婷综合| 成人久久视频在线观看| 色屁屁一区二区| 欧美日韩激情一区二区| 日韩欧美视频一区| 中文字幕在线播放不卡一区| 精品国产区一区| 一区二区三区四区视频精品免费| 国产一区激情在线| 久久综合久久综合久久综合| 久久久精品影视| 三级欧美韩日大片在线看| 不卡的av电影| 欧美国产一区在线| 久久成人免费网| 在线观看亚洲一区| 久久先锋影音av| 亚洲一二三四区| 极品美女销魂一区二区三区免费| 国产69精品一区二区亚洲孕妇| 色狠狠桃花综合| 精品一区免费av| 精品国产乱码久久久久久久久| 国产精品综合一区二区三区| 日韩一区二区三区av| 免费成人性网站| 日韩你懂的在线观看| 亚洲制服欧美中文字幕中文字幕| 成人天堂资源www在线| 久久综合一区二区| 精品无人区卡一卡二卡三乱码免费卡 | 精品国产乱码91久久久久久网站| 亚洲欧美电影院| 欧洲精品在线观看| 亚洲午夜激情av| 91亚洲国产成人精品一区二区三 | 亚洲一区二区三区小说| 欧美日本一区二区三区四区| 视频一区在线播放| 亚洲精品一二三四区| 精品久久人人做人人爽| 欧美三级电影网站| 日本福利一区二区| 粉嫩av亚洲一区二区图片| 日日夜夜免费精品视频| 亚洲色图欧洲色图婷婷| 精品乱人伦小说| 欧美精品三级在线观看| 91丨九色丨蝌蚪丨老版| 欧美系列亚洲系列| 亚洲三级小视频| 成人黄色777网| 亚洲欧美福利一区二区| 性久久久久久久| 欧洲精品在线观看|