GO 比较两个对象是否相同

本文探讨了Golang中的DeepEqual函数,用于深度比较对象,包括切片、数组、map、interface{}和struct。它不仅比较值,还关注数据类型,避免手动实现比较逻辑。DeepEqual的原理涉及递归比较,对于不同数据类型有特定的处理规则。文章总结了DeepEqual的使用和原理,鼓励利用官方库解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要是来聊一聊关于 Golang 中的深度比较 DeepEqual

因为最近发现身边的小伙伴写 2 个或者多个 map 比较的时候,都是自己去实现去比较每一个结构,每一个节点的 key 和 value 是不是都相等,且根据不同的数据结构,都要去实现一遍,没有必要自己造轮子

我们知道,对于布尔类型,整形的,浮点类型,复数,指针,字符串类型的值可以直接使用 == 来进行比较,确认双方是否相等

甚至对于 channel 类型,也是可以使用 == 来进行比较是否相等的

那么对于 golang 中的 切片 slice,数组 array,map,interface{},struct 结构体我们如何去进行比较呢?显然使用 == 是不行的,此处的 m1 和 m2 是 map[string]int

此处你是否可能会想到 C++ 还可以去重载操作符,咱们实现一下对应数据类型的操作符就可以了,妥妥的

你是否还会想到 PHP 中的 === 可以直接去比较数据的值和数据的类型,称为全等比较运算符

那么,看到此处,是否可以猜测 golang 的做法也是类似的呢?

实际上 golang 去比较两个对象是否相同,也是通过去比较数据的类型,数据的值,数据的长度等等维度来进行确认的

C++ 是需要我们自己编码实现,PHP 是直接提供 === ,Golang 是给我们在反射包中提供一个 DeepEqual 函数来进行灵活使用

DeepEqual 案例

func DeepEqual(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值