亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Golang斷言判斷值類型的實現方法

Golang斷言判斷值類型的實現方法

熱門標簽:上海極信防封電銷卡價格 寧波語音外呼系統公司 宿遷便宜外呼系統代理商 鄭州智能語音電銷機器人價格 重慶慶云企業400電話到哪申請 湛江crm外呼系統排名 仙桃400電話辦理 地圖標注免費定制店 不封卡外呼系統

Golang可以通過斷言,判斷值的類型

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

也可以通過反射判斷值的類型

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

類型斷言是什么,類型斷言和類型轉換有什么區別,這個問題以前我也常常分不清楚。為了幫助和我有一樣疑問的人,我決定得寫一篇關于這方面的博文,介紹一下golang中的類型斷言和類型轉換的區別,在JavaScript的超集Typescript里,也同樣有類型斷言的概念。這篇簡短的博文就是幫助大家解答這個疑問,我會盡量短的說清楚,我理解的類型轉換和類型斷言的區別是什么。

什么是類型轉換

類型轉換在很多靜態類型的語言中都會有的概念,類型轉換通常分為顯示類型轉換和隱式類型轉換。強制類型轉換形如:

f := 11.22
i := int(f)

例如有個float32的變量被賦值為11.22,現在我們想去掉小數部分,最簡單的方法就是將float32轉換為int32。

簡單來說,強制類型轉換就是你要從一個類型強制轉換到另一個類型。適用于一些基本類型,比如int, float之類等等。但在golang中,類型匹配是相當嚴格的,很多時候編譯器不會幫你去做,所以大多數的情況下,我們還是會做一些顯示的類型轉換。

比如這段看起來在其它靜態類型語言中毫無問題的代碼片段,在golang中編譯期就會報錯,golang會強制讓你做類型轉換。

var i int = 1
var f float64 = i

接下來看看隱式的類型轉換。golang中的隱式類型轉換主要存在于運行時。比如:

var w io.Writer = os.Stdout

這里將*File類型賦值給了io.Writer類型,在運行時會做一個隱式的類型轉換。

什么是斷言

在了解什么是類型斷言之前,先來了解一下斷言是什么

這是尼克楊嗎?

簡而言之,斷言就是對一種條件進行假設,如果這是尼克楊,那么我要要干嘛?如果這不是尼克楊又怎樣?
隨之,類型斷言就是對類型進行一種假設。

這里拿Typescript來說個事,在TS里我們很多時候會用到一種類型叫聯合類型,聯合類型A | B可以理解為它可以是A類型或者是B類型。實際例子:

let zhangsan:Student | null //表示zhangsan是一個Student或者null類型

我們需要使用zhangsan的時候,可以使用類型斷言

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

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

x.(T)

x是一種接口類型,T可以是一種具體的類型也可以是一種接口類型

golang為什么需要類型斷言

為此,我們思考一個問題,為什么Golang需要類型斷言,golang中對類型的要求十分嚴格,而且golang中也沒有Typescript中的聯合類型,好像一切類型都是固定不變的,有了強制轉換類型,為什么還需要類型斷言呢?

在Golang中,接口類型是能夠隱式轉換的。看一個具體的例子:

var w io.Writer = os.Stdout

w的類型為io.Writer,但是它被賦值了*File,這是Golang幫助我們做了一次類型轉換。這次類型轉換是在運行時的,編譯時并不能確定下來。在運行時,這個接口值的類型被賦值為了*File,與此同時,值也被賦值為了os.Stdout。

上述說明了一個問題,接口值的類型是不固定的!因為它的類型是要在運行時才能確定下來,這需要看它的動態值的類型才能確定。這就是需要類型斷言的原因了。

再看一個具體的例子

var w io.Writer = os.Stdout

這條語句執行過后,w只會擁有write方法,但是原本的*File不止擁有write方法,應該還擁有read方法,同時,它也是io.ReadWriter接口的一個實例。如果這時候我們想使用read方法怎么辦,那就需要類型斷言了。

rw := w.(io.ReadWriter)

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

類型斷言的檢查機制是怎樣的

于是我們想了解Golang的類型斷言的檢查機制是怎樣的,換句話說,Golang到底是如何來判斷斷言是否成功的。

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

1.當T為一個接口類型時

當T為一個接口時,首先會判斷x的動態值是否符合T這個接口,如果符合的話,斷言成功,反之斷言失敗,斷言失敗時會拋出一個panic異常。但是如果類型斷言出現在一個預期有兩個結果的賦值操作中,那么斷言失敗不會拋出panic異常,而是用一個bool值標識是否斷言成功。

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

為了健壯性,我們應該對ok返回的結果進行處理。標識是否斷言成功。

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

對一個接口類型的類型斷言改變了類型的表述方式,改變了可以獲取的方法集合(通常更大),但是它保護了接口值內部的動態類型和值的部分(Go Programing Language)

當T為一個具體類型時

當T為一個具體類型時,會先檢查x的動態值的類型是否為T,如果為T則斷言成功,如果不為T,則斷言失敗。

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

當x為nil

最后再簡單的說一下x為nil的情況,當x為nil時,那么不論斷言類型是任何類型,都會斷言失敗

到此這篇關于Golang斷言判斷值類型的實現方法的文章就介紹到這了,更多相關Golang斷言判斷值類型內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

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

標簽:電子產品 物業服務 遼寧 西雙版納 青海 安康 儋州 海南

巨人網絡通訊聲明:本文標題《Golang斷言判斷值類型的實現方法》,本文關鍵詞  Golang,斷言,判斷,值,類型,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang斷言判斷值類型的實現方法》相關的同類信息!
  • 本頁收集關于Golang斷言判斷值類型的實現方法的相關信息資訊供網民參考!
  • 推薦文章
    久久99中文字幕| 国产网站在线| 亚洲天堂一区二区三区四区| 久久国产精品永久免费网站| 一a一级片| 日日夜夜婷婷| 精品视频在线观看一区二区 | 天天做人人爱夜夜爽2020毛片| 一级女性大黄生活片免费| 欧美a免费| 日日夜夜婷婷| 黄视频网站免费看| 国产精品自拍亚洲| 日日夜夜婷婷| 免费的黄色小视频| 日本在线不卡免费视频一区| 久久精品大片| 久久久成人网| 国产91精品系列在线观看| 成人a大片高清在线观看| 国产激情视频在线观看| 国产伦久视频免费观看 视频| 999久久久免费精品国产牛牛| 免费一级片在线观看| 成人影视在线播放| 欧美激情一区二区三区视频高清| 国产极品精频在线观看| 国产福利免费观看| 国产综合91天堂亚洲国产| 精品国产亚一区二区三区| 一级毛片视频免费| 国产伦理精品| 青草国产在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 香蕉视频久久| 成人免费观看的视频黄页| 国产精品自拍亚洲| 国产一区精品| 精品国产三级a| 欧美1区| 国产91精品系列在线观看| 青青青草视频在线观看| 国产一区二区精品在线观看| 99久久精品国产麻豆| 久久久久久久久综合影视网| 国产成人啪精品| 久久精品人人做人人爽97| 欧美爱色| 日韩中文字幕在线播放| 黄视频网站在线看| 久久久成人影院| 精品国产一区二区三区久 | 精品国产香蕉在线播出| 青青青草视频在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 尤物视频网站在线| 青草国产在线| 欧美大片一区| 亚洲www美色| 欧美一级视频高清片| 九九九网站| 国产高清视频免费观看| 国产成人女人在线视频观看 | 青青久久网| 麻豆网站在线看| 免费国产一级特黄aa大片在线| 日韩在线观看免费| 日本在线播放一区| 九九久久99| 999精品视频在线| 91麻豆精品国产自产在线| 一级女性大黄生活片免费| 日韩中文字幕在线亚洲一区| 午夜精品国产自在现线拍| 美女被草网站| 国产伦理精品| 韩国三级一区| 精品视频在线观看一区二区| 成人影视在线观看| 亚洲天堂免费观看| 欧美大片aaaa一级毛片| 成人免费网站久久久| 99热精品一区| 日本特黄特黄aaaaa大片| a级毛片免费全部播放| 黄色短视频网站| 台湾毛片| 毛片成人永久免费视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产91视频网| 国产一区国产二区国产三区| 99久久精品国产片| 国产成人精品影视| 日日日夜夜操| 毛片成人永久免费视频| 色综合久久手机在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产伦精品一区三区视频| 日韩字幕在线| 日韩中文字幕在线观看视频| 日韩男人天堂| 国产一区二区高清视频| 九九精品久久| 麻豆污视频| 九九久久99综合一区二区| 成人a大片高清在线观看| 精品久久久久久中文字幕一区| 国产成人精品影视| 午夜激情视频在线观看| 国产福利免费视频| 欧美激情一区二区三区在线| 免费国产一级特黄aa大片在线| 欧美一级视频免费观看| 午夜在线观看视频免费 成人| 人人干人人草| 成人免费观看视频| 国产激情视频在线观看| 天天做人人爱夜夜爽2020| 精品久久久久久免费影院| 99色视频在线观看| 999精品视频在线| 欧美大片a一级毛片视频| 999久久66久6只有精品| 精品国产一区二区三区久久久蜜臀| 欧美另类videosbestsex高清| 国产麻豆精品hdvideoss| 高清一级做a爱过程不卡视频| 亚欧成人毛片一区二区三区四区| 国产视频一区二区在线播放| 韩国毛片 免费| 黄色免费三级| 午夜精品国产自在现线拍| 欧美激情影院| 亚洲第一色在线| 国产不卡在线看| 国产a网| a级毛片免费全部播放| 欧美激情一区二区三区视频| 国产不卡高清在线观看视频| 高清一级毛片一本到免费观看| 国产精品自拍在线观看| 国产伦久视频免费观看 视频| 午夜久久网| 色综合久久天天综线观看| 国产麻豆精品hdvideoss| 亚洲第一色在线| 免费一级片在线| 精品国产一区二区三区国产馆| 欧美a级片视频| 亚洲 国产精品 日韩| 精品国产三级a| 精品视频在线看| 免费的黄视频| 欧美国产日韩在线| 欧美电影免费| 欧美日本二区| 午夜精品国产自在现线拍| 国产成人女人在线视频观看 | 中文字幕一区二区三区 精品| 99色精品| 欧美电影免费看大全| 一a一级片| 成人a大片高清在线观看| 国产网站麻豆精品视频| 一级毛片视频在线观看| 可以免费看毛片的网站| 国产伦理精品| 欧美日本二区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产国语对白一级毛片| 青青久久网| 国产成人啪精品| 久久99中文字幕久久| 黄色免费网站在线| 久久精品人人做人人爽97| 久久国产精品自线拍免费| 日本特黄特黄aaaaa大片| 欧美爱爱网| 成人高清视频在线观看| 欧美激情一区二区三区视频高清| 亚洲天堂免费| 91麻豆精品国产自产在线观看一区| 精品国产三级a| 成人免费高清视频| 亚洲第一色在线| 日韩中文字幕在线播放| 美女被草网站| 91麻豆精品国产片在线观看| 久久99中文字幕| 欧美国产日韩久久久| 免费一级片在线| 欧美激情在线精品video| 日本免费乱理伦片在线观看2018| 国产网站免费视频| 亚洲女初尝黑人巨高清在线观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 99久久精品费精品国产一区二区| 欧美另类videosbestsex| 成人影视在线播放|