Go语言中比较两个map[string]interface{}是否相等

 更新时间:2023年08月10日 11:15:15   作者:妮蔻大眼睛  
本文主要介绍了Go语言中比较两个map[string]interface{}是否相等,我们可以将其转化成顺序一样的 slice ,然后再转化未json,具有一定的参考价值,感兴趣的可以了解一下

Go语言中Map是无序的

再Go语言中,Map是一个内置类型,它将键与值绑定在一起,可以通过键获取响应的值。

由于Go Map内部不存储机制是以key为hash的结构来实现的,所以顺序是混乱的。

举例说明:在两次遍历中读取数据的顺序是不一样的。

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)
    }
}

执行结果:

第一遍:
apple : 2
banana : 3
orange : 1
第二遍:
banana : 3
orange : 1
apple : 2

因为Go中的Map是无序的,所以每次读取都不一样。

Go interface{}无法比较是否相等

Go 语言中两个 interface{} 是无法比较是否相等的。因为类型不确定,任何类型的数据都可以被塞到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{}相等内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解Golang中WebSocket和WSS的支持

    深入理解Golang中WebSocket和WSS的支持

    本文主要介绍了深入理解Golang中WebSocket和WSS的支持,实现了Golang构建WebSocket服务器和客户端,并使用自签名证书实现WSS的功能,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Golang爬虫框架colly使用浅析

    Golang爬虫框架colly使用浅析

    这篇文章主要介绍了Golang爬虫框架colly的使用,colly是Go实现的比较有名的一款爬虫框架,而且Go在高并发和分布式场景的优势也正是爬虫技术所需要的,感兴趣想要详细了解可以参考下文
    2023-05-05
  • Golang操作Redis的实现示例

    Golang操作Redis的实现示例

    本文介绍了Redis作为高性能key-value数据库的特性,包括数据持久化、丰富的数据结构、高并发性能、原子操作以及连接池管理,通过实例展示了使用Redis进行String、List和Hash操作,以及设置过期时间和连接池的管理,感兴趣的可以了解一下
    2025-11-11
  • Go+Redis缓存设计与优化实现

    Go+Redis缓存设计与优化实现

    本文主要介绍了Go+Redis缓存设计与优化实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 详解Golang Map中的key为什么是无序的

    详解Golang Map中的key为什么是无序的

    本文主要介绍了Golang Map中的key为什么是无序的,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • golang 设置web请求状态码操作

    golang 设置web请求状态码操作

    这篇文章主要介绍了golang 设置web请求状态码操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • go-zero 组件布隆过滤器使用示例详解

    go-zero 组件布隆过滤器使用示例详解

    这篇文章主要为大家介绍了go-zero组件介绍之布隆过滤器使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 使用Go语言自制简单易用的Web框架

    使用Go语言自制简单易用的Web框架

    这篇文章主要为大家详细介绍了如何使用Go语言实现自制简单易用的Web框架,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Golang语言如何高效拼接字符串详解

    Golang语言如何高效拼接字符串详解

    最近在做性能优化,有个函数里面的耗时特别长,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其实有很多种实现,下面这篇文章主要给大家介绍了关于Golang语言如何高效拼接字符串的相关资料,需要的朋友可以参考下
    2021-11-11
  • golang获取变量或对象类型的几种方式总结

    golang获取变量或对象类型的几种方式总结

    在golang中并没有提供内置函数来获取变量的类型,但是通过一定的方式也可以获取,下面这篇文章主要给大家介绍了关于golang获取变量或对象类型的几种方式,需要的朋友可以参考下
    2022-12-12

最新评论