Go語言中比較兩個map[string]interface{}是否相等
Go語言中Map是無序的
再Go語言中,Map是一個內(nèi)置類型,它將鍵與值綁定在一起,可以通過鍵獲取響應(yīng)的值。
由于Go Map內(nèi)部不存儲機制是以key為hash的結(jié)構(gòu)來實現(xiàn)的,所以順序是混亂的。
舉例說明:在兩次遍歷中讀取數(shù)據(jù)的順序是不一樣的。
func main() {
a := map[string]interface{}{
"orange": "1",
"apple": "2",
"banana": "3",
}
fmt.Println("第一遍:")
for k, v := range a {
fmt.Print(k + " : ")
fmt.Println(v)
}
fmt.Println("第二遍:")
for k, v := range a {
fmt.Print(k + " : ")
fmt.Println(v)
}
}執(zhí)行結(jié)果:
第一遍:
apple : 2
banana : 3
orange : 1
第二遍:
banana : 3
orange : 1
apple : 2
因為Go中的Map是無序的,所以每次讀取都不一樣。
Go interface{}無法比較是否相等
Go 語言中兩個 interface{} 是無法比較是否相等的。因為類型不確定,任何類型的數(shù)據(jù)都可以被塞到interface{}中。
那么如何比較兩個map[string]interface{} 是否相等呢?
首先,我們可以將它們轉(zhuǎn)化為 json 字符串來比較即可,但是因為Map是無序的,所以轉(zhuǎn)化的json字符串不一定會一模一樣。(當(dāng)然,你也可以用反射來做,但是代碼量多,麻煩。)
所以我們可以將其轉(zhuǎn)化成順序一樣的 slice ,然后再轉(zhuǎn)化未 json 。 這樣就確保的json可以一樣了。
代碼如下:
func CompareTwoMapInterface(data1 map[string]interface{},?
?? ??? ??? ??? ??? ??? ?data2 map[string]interface{}) bool {
?? ?keySlice := make([]string, 0)
?? ?dataSlice1 := make([]interface{}, 0)
?? ?dataSlice2 := make([]interface{}, 0)
?? ?for key, value := range data1 {
?? ??? ?keySlice = append(keySlice, key)
?? ??? ?dataSlice1 = append(dataSlice1, value)
?? ?}
?? ?for _, key := range keySlice {
?? ??? ?if data, ok := data2[key]; ok {
?? ??? ??? ?dataSlice2 = append(dataSlice2, data)
?? ??? ?} else {
?? ??? ??? ?return false
?? ??? ?}
?? ?}
?? ?dataStr1, _ := json.Marshal(dataSlice1)
?? ?dataStr2, _ := json.Marshal(dataSlice2)
?? ?return string(dataStr1) == string(dataStr2)
}到此這篇關(guān)于Go語言中比較兩個map[string]interface{}是否相等的文章就介紹到這了,更多相關(guān)Go 兩個map[string]interface{}相等內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go+Redis緩存設(shè)計與優(yōu)化實現(xiàn)
本文主要介紹了Go+Redis緩存設(shè)計與優(yōu)化實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
golang獲取變量或?qū)ο箢愋偷膸追N方式總結(jié)
在golang中并沒有提供內(nèi)置函數(shù)來獲取變量的類型,但是通過一定的方式也可以獲取,下面這篇文章主要給大家介紹了關(guān)于golang獲取變量或?qū)ο箢愋偷膸追N方式,需要的朋友可以參考下2022-12-12

