GO中struct的比较

本文探讨了Go语言中struct实例的比较规则,指出只有当struct不包含不可比较类型如slice和map时,它们才能直接进行比较。示例展示了当struct包含可比较类型(如int)时比较为true,而当包含不可比较的[]int时会报错。为了解决这个问题,文章推荐使用`reflect.DeepEqual`函数进行深层比较,它能正确判断两个包含不可比较类型struct的相等性。

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

对应基础类型的比较,相信我们学习golang的过程中也很容易了解到

 可以比较的类型: IntegerFloatingStringBooleanComplexPointerChannelInterfaceArray

不可以比较的类型: slice,map,function

那么对于struct的实例来说,什么是可以直接比较,什么是不可以直接比较的呢

只包含可以比较类型的struct是可以直接比较的,而包含了不可比较类型的struct就不可以直接比较了 

type Node struct {
	Val int
	Data [1]int
}

func main()  {
	a := Node{Val: 1, Data: [1]int{1}}
	b := Node{Val: 1, Data: [1]int{1}}
	fmt.Println(a == b) // true
}
type Node struct {
	Val int
	Data []int
}

func main()  {
	a := Node{Val: 1, Data: []int{1}}
	b := Node{Val: 1, Data: []int{1}}
	fmt.Println(a == b) // invalid operation: a == b (struct containing []int cannot be compared)
}

但是我们需要对这种不可以直接比较的类型,又如何比较呢,答案是reflect.DeepEqual


type Node struct {
	Val int
	Data []int
}

func main()  {
	a := Node{Val: 1, Data: []int{1}}
	b := Node{Val: 1, Data: []int{1}}
	fmt.Println(reflect.DeepEqual(a, b)) // true
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值