日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

GO 比較兩個(gè)對(duì)象是否相同

來(lái)源: 責(zé)編: 時(shí)間:2023-10-06 19:19:47 365觀看
導(dǎo)讀本文主要是來(lái)聊一聊關(guān)于 Golang 中的深度比較 DeepEqual因?yàn)樽罱l(fā)現(xiàn)身邊的小伙伴寫(xiě) 2 個(gè)或者多個(gè) map 比較的時(shí)候,都是自己去實(shí)現(xiàn)去比較每一個(gè)結(jié)構(gòu),每一個(gè)節(jié)點(diǎn)的 key 和 value 是不是都相等,且根據(jù)不同的數(shù)據(jù)結(jié)構(gòu),都要去

本文主要是來(lái)聊一聊關(guān)于 Golang 中的深度比較 DeepEqualQPt28資訊網(wǎng)——每日最新資訊28at.com

因?yàn)樽罱l(fā)現(xiàn)身邊的小伙伴寫(xiě) 2 個(gè)或者多個(gè) map 比較的時(shí)候,都是自己去實(shí)現(xiàn)去比較每一個(gè)結(jié)構(gòu),每一個(gè)節(jié)點(diǎn)的 key 和 value 是不是都相等,且根據(jù)不同的數(shù)據(jù)結(jié)構(gòu),都要去實(shí)現(xiàn)一遍,沒(méi)有必要自己造輪子QPt28資訊網(wǎng)——每日最新資訊28at.com

我們知道,對(duì)于布爾類(lèi)型,整形的,浮點(diǎn)類(lèi)型,復(fù)數(shù),指針,字符串類(lèi)型的值可以直接使用 == 來(lái)進(jìn)行比較,確認(rèn)雙方是否相等QPt28資訊網(wǎng)——每日最新資訊28at.com

甚至對(duì)于 channel 類(lèi)型,也是可以使用 == 來(lái)進(jìn)行比較是否相等的QPt28資訊網(wǎng)——每日最新資訊28at.com

那么對(duì)于 golang 中的 切片 slice,數(shù)組 array,map,interface{},struct 結(jié)構(gòu)體我們?nèi)绾稳ミM(jìn)行比較呢?顯然使用 == 是不行的,此處的 m1 和 m2 是 map[string]intQPt28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片QPt28資訊網(wǎng)——每日最新資訊28at.com

此處你是否可能會(huì)想到 C++ 還可以去重載操作符,咱們實(shí)現(xiàn)一下對(duì)應(yīng)數(shù)據(jù)類(lèi)型的操作符就可以了,妥妥的QPt28資訊網(wǎng)——每日最新資訊28at.com

你是否還會(huì)想到 PHP 中的 === 可以直接去比較數(shù)據(jù)的值和數(shù)據(jù)的類(lèi)型,稱(chēng)為全等比較運(yùn)算符QPt28資訊網(wǎng)——每日最新資訊28at.com

那么,看到此處,是否可以猜測(cè) golang 的做法也是類(lèi)似的呢?QPt28資訊網(wǎng)——每日最新資訊28at.com

實(shí)際上 golang 去比較兩個(gè)對(duì)象是否相同,也是通過(guò)去比較數(shù)據(jù)的類(lèi)型,數(shù)據(jù)的值,數(shù)據(jù)的長(zhǎng)度等等維度來(lái)進(jìn)行確認(rèn)的QPt28資訊網(wǎng)——每日最新資訊28at.com

C++ 是需要我們自己編碼實(shí)現(xiàn),PHP 是直接提供 === ,Golang 是給我們?cè)诜瓷浒刑峁┮粋€(gè) DeepEqual 函數(shù)來(lái)進(jìn)行靈活使用QPt28資訊網(wǎng)——每日最新資訊28at.com

DeepEqual 案例

圖片圖片QPt28資訊網(wǎng)——每日最新資訊28at.com

func DeepEqual(x, y interface{}) bool

很多朋友在不知道 golang 有提供 DeepEqual 功能的時(shí)候,比較 2 個(gè) map 可能會(huì)這樣去實(shí)現(xiàn):QPt28資訊網(wǎng)——每日最新資訊28at.com

func mapEqual(m1, m2 map[string]int) bool {   for k, v := range m1 {      vv, ok := m2[k]      if !ok {         return false      }      if v != vv {         return false      }   }   return true}

當(dāng)然也沒(méi)有啥問(wèn)題,但是如果這個(gè)時(shí)候需要我們比較兩個(gè)切片是否相等,兩個(gè)結(jié)構(gòu)體是否相等,甚至兩個(gè) interface{} 是否相等的時(shí)候,是不是都要去寫(xiě)對(duì)應(yīng)的工具函數(shù)呢?QPt28資訊網(wǎng)——每日最新資訊28at.com

使用 DeepEqual 比較 map

圖片圖片QPt28資訊網(wǎng)——每日最新資訊28at.com

兩個(gè)同一類(lèi)型的 map,使用自己編寫(xiě)的 mapEqual 和 使用 DeepEqual 我們得到的結(jié)果都是我們所期望的QPt28資訊網(wǎng)——每日最新資訊28at.com

但是對(duì)于 DeepEqual 來(lái)說(shuō),你可以傳入任何類(lèi)型的數(shù)據(jù),入?yún)⑹?2 個(gè) interface{} 類(lèi)型的數(shù)據(jù),響應(yīng)是 boolQPt28資訊網(wǎng)——每日最新資訊28at.com

對(duì)于 mapEqual 來(lái)說(shuō),你就只能傳入 map[string]int 類(lèi)型的數(shù)據(jù),看到此處,自己造輪子,弊端還是很明顯的吧QPt28資訊網(wǎng)——每日最新資訊28at.com

自然,你也可以去將參數(shù)設(shè)計(jì)成 interface{} 類(lèi)型的,然后再去進(jìn)行各種反射處理QPt28資訊網(wǎng)——每日最新資訊28at.com

可是明明有官方庫(kù),何必自己再弄一遍呢,我們不應(yīng)該是吸收官方的思想和精華,站在巨佬的肩膀上去做更多有意義的事情嗎QPt28資訊網(wǎng)——每日最新資訊28at.com

使用 DeepEqual 比較 map 和 自定義類(lèi)型

可使用 DeepEqual 的時(shí)候,一定要知道他的運(yùn)作機(jī)制和原理QPt28資訊網(wǎng)——每日最新資訊28at.com

例如下面的案例,我們自定義一個(gè)數(shù)據(jù)類(lèi)型 myType,實(shí)際上和 map[string]int 是一樣的, 可是我們?nèi)⒃?map[string]int 的 m1 和 myType 類(lèi)型 m2 進(jìn)行比較的時(shí)候,他們實(shí)際上是不相等的QPt28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片QPt28資訊網(wǎng)——每日最新資訊28at.com

那么,看到這里,實(shí)際上 DeepEqual 自然是要比我們自己寫(xiě)的 mapEqual 強(qiáng)太多了,他不僅關(guān)注數(shù)據(jù)的值,還會(huì)關(guān)注具體數(shù)據(jù)的類(lèi)型,根據(jù)不同的數(shù)據(jù)類(lèi)型,來(lái)進(jìn)行不同的數(shù)據(jù)校驗(yàn)和比較QPt28資訊網(wǎng)——每日最新資訊28at.com

DeepEqual 原理

DeepEqual 的代碼實(shí)現(xiàn)也非常簡(jiǎn)單,參數(shù)中傳入 interface{}, 實(shí)現(xiàn)上會(huì)去確認(rèn)具體的數(shù)據(jù)類(lèi)型,是否為空,如果是一般的的數(shù)據(jù)類(lèi)型,那么直接使用 == 進(jìn)行比較即可QPt28資訊網(wǎng)——每日最新資訊28at.com

如果是其他的數(shù)據(jù)類(lèi)型,那么就會(huì)遞歸的去調(diào)用 deepValueEqual 來(lái)一層一層的去校驗(yàn)數(shù)據(jù)和比較QPt28資訊網(wǎng)——每日最新資訊28at.com

為什么需要遞歸調(diào)用呢?QPt28資訊網(wǎng)——每日最新資訊28at.com

這個(gè)很明顯,例如對(duì)于一個(gè)切片來(lái)說(shuō),如果里面的元素是簡(jiǎn)單的字符串,或者整型數(shù)字,那么第一層使用 deepValueEqual 去識(shí)別和處理切片的類(lèi)型比較,讀取到切片元素的時(shí)候就可以直接走 == 來(lái)確認(rèn)是否相等QPt28資訊網(wǎng)——每日最新資訊28at.com

那么切片中也是可以是其他的任意數(shù)據(jù)結(jié)構(gòu)的,也可以是自定義的結(jié)構(gòu)體QPt28資訊網(wǎng)——每日最新資訊28at.com

因此在做這種比較的時(shí)候,遍歷到切片元素的時(shí)候,也要去確認(rèn)元素是什么類(lèi)型的,如果是上述提到的非簡(jiǎn)單類(lèi)型,那么仍然需要繼續(xù)一層一層的識(shí)別他的類(lèi)型,和他的值,再進(jìn)行逐個(gè)比較QPt28資訊網(wǎng)——每日最新資訊28at.com

例如這樣去比較這樣結(jié)構(gòu)的切片,真的完全有必要遞歸去一層一層的確認(rèn)數(shù)據(jù)類(lèi)型和數(shù)值type Node struct{   M map[string]int   In interface{}   Sli []map[int][chan int]}var sli = []Node{...}

在比較的過(guò)程中,哪怕有一個(gè)環(huán)節(jié)不是我們所期望的,那么都會(huì)直接返回 false,即不相等QPt28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片QPt28資訊網(wǎng)——每日最新資訊28at.com

那么,仔細(xì)看 DeepEqual 的注釋?zhuān)覀兛梢钥吹?,這里有詳細(xì)的關(guān)于各種數(shù)據(jù)類(lèi)型的比較和校驗(yàn)細(xì)節(jié),翻譯一下僅供大家參考,希望你有機(jī)會(huì)用到QPt28資訊網(wǎng)——每日最新資訊28at.com

  • 數(shù)組 Array

比較相同索引處的元素是否相等QPt28資訊網(wǎng)——每日最新資訊28at.com

  • 結(jié)構(gòu)體 struct

比較相應(yīng)字段,包括導(dǎo)出和不導(dǎo)出(此處表示字段開(kāi)頭是大寫(xiě)還是小寫(xiě))QPt28資訊網(wǎng)——每日最新資訊28at.com

  • 函數(shù) Func

只有當(dāng)函數(shù)為 nil 的時(shí)候,才會(huì)是相等的,其他情況都不相等QPt28資訊網(wǎng)——每日最新資訊28at.com

  • Interface{}

兩者都存在具體的值的時(shí)候,那么是相等的QPt28資訊網(wǎng)——每日最新資訊28at.com

  • Map

都為空的時(shí)候是可以是相等的QPt28資訊網(wǎng)——每日最新資訊28at.com

都不為空的時(shí)候,會(huì)去比較他們的長(zhǎng)度,他們是否有相同的 key 且對(duì)應(yīng)相同的 value ,若都相同,則相等QPt28資訊網(wǎng)——每日最新資訊28at.com

  • 指針 pointer

可以直接使用 == 進(jìn)行比較,和 == 效果一致,或者指針指向的值是相等的QPt28資訊網(wǎng)——每日最新資訊28at.com

  • 切片 slice

都為 nil 的時(shí)候,是相等的QPt28資訊網(wǎng)——每日最新資訊28at.com

不為空的時(shí)候,會(huì)去比較他們的長(zhǎng)度,且指向的底層數(shù)組也得有相同的元素,也就是指向底層數(shù)組的地址是相同的QPt28資訊網(wǎng)——每日最新資訊28at.com

  • 對(duì)于 other values 其他的數(shù)據(jù)類(lèi)型,例如整型,布爾,字符串,通道

直接可以使用 == 來(lái)進(jìn)行比較, DeepEqual 的源碼實(shí)現(xiàn)對(duì)于這些類(lèi)型的數(shù)據(jù)也是直接使用 == 比較的,簡(jiǎn)單粗暴QPt28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

本次主要聊了關(guān)于QPt28資訊網(wǎng)——每日最新資訊28at.com

  • 非簡(jiǎn)單數(shù)據(jù)類(lèi)型的比較如何去處理
  • DeepEqual 的使用方式以及注意事項(xiàng)
  • DeepEqual 的原理和其支持的數(shù)據(jù)類(lèi)型的判定規(guī)則

本文鏈接:http://m.www897cc.com/showinfo-26-12137-0.htmlGO 比較兩個(gè)對(duì)象是否相同

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 計(jì)數(shù)排序(Counting Sort)詳解

下一篇: 十個(gè)事半功倍的IntelliJ Idea插件和主題

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美日韩伦理在线免费| 99精品视频免费| 欧美日韩福利视频| 欧美特黄一级大片| 国产亚洲精品bt天堂精选| 曰本成人黄色| 国产精品99久久久久久宅男| 欧美在线观看一二区| 久久一二三区| 欧美日韩成人综合| 国产农村妇女毛片精品久久麻豆 | 国产欧美日韩精品丝袜高跟鞋| 韩国三级电影久久久久久| 亚洲国内在线| 亚洲欧美综合精品久久成人| 国产精品久久久久影院色老大 | 在线观看国产精品淫| 最新国产乱人伦偷精品免费网站| 亚洲一区影院| 久久久久久国产精品mv| 欧美日产一区二区三区在线观看| 国产欧美一区二区三区久久 | 国产精品成人在线观看| 国内精品美女av在线播放| 亚洲美女av黄| 久久er精品视频| 欧美精品在线免费播放| 国产欧美日韩91| 日韩视频免费| 久久亚洲欧美| 国产免费一区二区三区香蕉精| 亚洲人成7777| 久久精品中文字幕免费mv| 欧美日韩在线一区| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲视频一区二区| 欧美不卡激情三级在线观看| 国产欧美一区二区在线观看| av成人毛片| 欧美v亚洲v综合ⅴ国产v| 国产农村妇女精品一二区| 99在线观看免费视频精品观看| 久久久亚洲国产天美传媒修理工| 国产精品女同互慰在线看| 亚洲精品视频在线播放| 狼人天天伊人久久| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美体内谢she精2性欧美| 亚洲第一区中文99精品| 欧美在线一级视频| 国产精品美女视频网站| 亚洲免费av网站| 欧美chengren| 在线成人性视频| 久久精品道一区二区三区| 国产精品你懂的在线欣赏| 99在线精品免费视频九九视| 暖暖成人免费视频| 尤物在线精品| 久久精品亚洲精品国产欧美kt∨| 国产精品美女视频网站| 99re6热在线精品视频播放速度| 免费91麻豆精品国产自产在线观看| 国产一区二区成人久久免费影院| 亚洲免费在线观看视频| 欧美网站在线| 一本一本a久久| 欧美日韩国产在线| 亚洲免费电影在线观看| 欧美成人嫩草网站| 亚洲激情婷婷| 欧美福利视频在线观看| 亚洲国产一区二区三区a毛片 | 国产深夜精品福利| 欧美一级片久久久久久久| 国产精品日韩一区| 午夜视频久久久久久| 国产伦精品一区二区三区照片91 | 国内视频精品| 久久久综合激的五月天| 一区二区亚洲| 老司机免费视频久久| 亚洲成人在线| 欧美成年视频| 日韩视频一区二区在线观看| 欧美日韩国产黄| 一本色道久久综合狠狠躁篇的优点| 欧美日本在线视频| 一区二区三区四区五区精品视频| 欧美三级午夜理伦三级中文幕| 亚洲私人影吧| 国产精品一区二区你懂得 | 欧美成人一区二区三区在线观看| 亚洲欧洲精品成人久久奇米网| 欧美精品午夜| 中文av一区特黄| 国产精品三区www17con| 亚欧成人精品| 黄色成人av| 蜜桃精品一区二区三区| 91久久精品视频| 欧美日韩在线观看一区二区三区| 亚洲图片欧美午夜| 国产亚洲精品久久久久婷婷瑜伽| 久久久亚洲人| 亚洲理论电影网| 国产精品免费一区二区三区观看| 久久不射2019中文字幕| 亚洲国产成人精品久久| 欧美日韩精品二区第二页| 亚洲自拍高清| 激情久久综艺| 欧美黑人在线观看| 亚洲在线一区二区| 黄页网站一区| 欧美日韩国产在线播放网站| 亚洲欧美日韩国产| 激情综合亚洲| 欧美日韩精品一区二区天天拍小说 | 亚洲国产精品一区| 欧美午夜免费| 久久久久一本一区二区青青蜜月| 亚洲日本在线视频观看| 国产精品福利网| 久久久久久香蕉网| 99视频国产精品免费观看| 国产美女扒开尿口久久久| 免费的成人av| 亚洲尤物影院| 亚洲国产精品成人| 国产精品免费观看在线| 久久综合久色欧美综合狠狠| 亚洲精品午夜| 国产在线不卡视频| 欧美日韩的一区二区| 久久av二区| 一二三区精品| 精品999在线播放| 国产精品第一区| 欧美va天堂va视频va在线| 亚洲欧美视频| 亚洲精品视频在线播放| 国产在线一区二区三区四区| 欧美屁股在线| 久久久精品tv| 亚洲综合日本| 亚洲乱码国产乱码精品精天堂| 国产午夜精品理论片a级大结局| 欧美精品久久天天躁| 久久国产婷婷国产香蕉| 亚洲视频www| 91久久国产综合久久蜜月精品 | 亚洲欧洲日本国产| 国产午夜精品福利| 欧美午夜a级限制福利片| 免费欧美日韩国产三级电影| 西瓜成人精品人成网站| 日韩一区二区精品葵司在线| 伊人久久婷婷| 国产小视频国产精品| 欧美视频网址| 欧美国产一区二区三区激情无套| 久久精品女人的天堂av| 亚洲免费在线看| 99精品欧美| 亚洲精品国产无天堂网2021| 黄色一区二区在线| 国产视频在线观看一区二区三区| 欧美三级视频在线| 欧美激情一区二区三区在线视频观看| 久久黄金**| 欧美一区二区三区免费观看| 亚洲午夜女主播在线直播| 日韩视频精品在线观看| 亚洲激情网址| 136国产福利精品导航| 国内一区二区三区| 国产亚洲精品资源在线26u| 国产精品国产三级国产a| 欧美日韩www| 欧美精品日韩一区| 欧美成人中文字幕在线| 免费看黄裸体一级大秀欧美| 久久久久国产精品人| 欧美中文字幕在线视频| 午夜欧美精品| 午夜在线观看欧美| 午夜精品短视频| 午夜免费日韩视频| 亚洲欧美日韩爽爽影院| 亚洲自拍偷拍视频| 亚洲网站在线| 亚洲一区二区三区免费在线观看 | 另类酷文…触手系列精品集v1小说| 久久精品国产一区二区电影| 欧美一区久久| 久久精品国产精品亚洲精品| 久久经典综合| 久久伊人免费视频| 麻豆精品视频在线| 欧美a级片网| 欧美高清在线一区二区| 欧美精品一区二区三区蜜臀| 欧美日本国产精品|