Go語言中比較兩個map[string]interface{}是否相等
Go語言中Map是無序的
再Go語言中,Map是一個內(nèi)置類型,它將鍵與值綁定在一起,可以通過鍵獲取響應的值。
由于Go Map內(nèi)部不存儲機制是以key為hash的結構來實現(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í)行結果:
第一遍:
apple : 2
banana : 3
orange : 1
第二遍:
banana : 3
orange : 1
apple : 2
因為Go中的Map是無序的,所以每次讀取都不一樣。
Go interface{}無法比較是否相等
Go 語言中兩個 interface{} 是無法比較是否相等的。因為類型不確定,任何類型的數(shù)據(jù)都可以被塞到interface{}中。
那么如何比較兩個map[string]interface{} 是否相等呢?
首先,我們可以將它們轉化為 json 字符串來比較即可,但是因為Map是無序的,所以轉化的json字符串不一定會一模一樣。(當然,你也可以用反射來做,但是代碼量多,麻煩。)
所以我們可以將其轉化成順序一樣的 slice ,然后再轉化未 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) }
到此這篇關于Go語言中比較兩個map[string]interface{}是否相等的文章就介紹到這了,更多相關Go 兩個map[string]interface{}相等內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux中Go環(huán)境配置和GoModule常用操作
這篇文章主要介紹了Linux中Go環(huán)境配置和GoModule,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01Go開發(fā)go-optioner工具實現(xiàn)輕松生成函數(shù)選項模式代碼
go-optioner?是一個在?Go?代碼中生成函數(shù)選項模式代碼的工具,可以根據(jù)給定的結構定義自動生成相應的選項代碼,下面就來聊聊go-optioner是如何使用的吧2023-07-07golang用melody搭建輕量的websocket服務的示例代碼
在Go中,可以使用gin和melody庫來搭建一個輕量級的WebSocket服務,gin是一個流行的Web框架,而melody是一個用于處理WebSocket的庫,本文給大家演示如何使用gin和melody搭建WebSocket服務,感興趣的朋友一起看看吧2023-10-10