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{}相等内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言学习之接口使用的示例详解

    Go语言学习之接口使用的示例详解

    Go语言并没有类的定义,接口可以说Go语言最接近于类的实现方式,但是更轻量。本文将通过一些简单的示例和大家介绍下Go语言中接口的使用,感兴趣的可以学习一下
    2022-11-11
  • 解决Go gorm踩过的坑

    解决Go gorm踩过的坑

    这篇文章主要介绍了解决Go gorm踩过的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang通过mysql语句实现分页查询

    golang通过mysql语句实现分页查询

    这篇文章主要介绍了golang通过mysql语句实现分页查询,文章内容介绍详细,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-03-03
  • 使用Go http重试请求的示例

    使用Go http重试请求的示例

    开发中对于http请求是经常遇到,一般可能网络延迟或接口返回超时,这篇文章主要介绍了使用Go http重试请求的示例,需要的朋友可以参考下
    2022-08-08
  • Go语言中websocket的使用demo分享

    Go语言中websocket的使用demo分享

    WebSocket是一种在单个TCP连接上进行全双工通信的协议。这篇文章主要和大家分享了一个Go语言中websocket的使用demo,需要的可以参考一下
    2022-12-12
  • 超实用的Golang通道指南之轻松实现并发编程

    超实用的Golang通道指南之轻松实现并发编程

    Golang 中的通道是一种高效、安全、灵活的并发机制,用于在并发环境下实现数据的同步和传递。本文主要介绍了如何利用通道轻松实现并发编程,需要的可以参考一下
    2023-04-04
  • go语言接口的定义和实现简单分享

    go语言接口的定义和实现简单分享

    这篇文章主要介绍了go语言接口的定义和实现简单分享的相关资料,需要的朋友可以参考下
    2023-08-08
  • Go语法糖之‘...’ 的使用实例详解

    Go语法糖之‘...’ 的使用实例详解

    语法糖(Syntactic sugar),也译为糖衣语法,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。这篇文章主要给大家介绍Go语法糖之‘...’ 的使用,感兴趣的朋友一起看看吧
    2018-10-10
  • 详解如何在Go语言中调用C源代码

    详解如何在Go语言中调用C源代码

    这篇文章主要为大家详细介绍了如何在Go语言中调用C语言源代码,文中的示例代码讲解详细,对我们学习或工作有一定的帮助,需要的可以参考一下
    2022-05-05
  • Go语言展现快速排序算法全过程的思路及代码示例

    Go语言展现快速排序算法全过程的思路及代码示例

    这篇文章主要介绍了Go语言展现快速排序算法全过程的思路及代码示例,文章最后作者还提到了对Quick Sort算法优化的一些想法,需要的朋友可以参考下
    2016-04-04

最新评论