如何比较golang中的结构体是否相等

本文介绍了Go语言中结构体的比较规则,强调简单类型如整型、浮点型、字符串可以直接使用`==`进行比较,而复杂类型如切片、映射和函数则不能直接比较。同时,展示了如何在结构体之间进行类型转换以进行值比较,并通过示例代码说明了转换后使用`==`比较的正确性。
摘要由CSDN通过智能技术生成

转自:https://blog.csdn.net/jcetpoor/article/details/108946530

如果是相同的无复杂类型的结构体创建的对象 可以直接使用 == 对比值和指针

简单类型
可排序的数据类型
整型Integer
浮点型Floating-point
字符串String

可以比较的数据类型
除了上述三种外,还有
Boolean,
Complex,
Pointer,
Channel,
Interface
Array

复杂类型 不可比较的数据类型
Slice
Map
Function
 

type User struct {
	age  int
	name string
}

func main() {
	user := User{
		1,
		"d",
	}
	user2 := User{
		1,
		"d",
	}
	fmt.Println(user == user2)  //打印的结果是true 会去自动对比内部的属性是否相等
	//但是如果结构体内部含有map,slice,Function 使用==比较编译会报错
}

如果不是同一个结构体 创建的两个对象 两个struct可以相互转换,且不包含不可比较的成员变量,转换成相同类型后可以使用==操作符
示例

type USER struct {
	age  int
	name string
	u    Name
}
type Name struct {
	a string
}
type USER2 struct {
	age  int
	name string
	u    Name
}

func main() {
	user := USER{
		1,
		"d",
		Name{""},
	}
	user3 := USER2{
		1,
		"d",
		Name{""},
	}
	user2 := USER(user3)
	fmt.Println(user2 == user) //编译通过 打印结果是true
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值