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

本文探讨了Go语言中结构体的值比较与指针比较,以及不同类型之间的转换。强调了简单类型如整型、浮点型、字符串等可以直接使用`==`进行比较,而复杂类型如Slice、Map等则不能直接比较。同时,展示了如何在结构体之间进行转换,并通过示例代码说明了转换后的结构体可以使用`==`进行值比较。文章还提及了结构体中包含不可比较类型的限制及其在实际编程中的应用。

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

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

简单类型

可排序的数据类型

整型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、付费专栏及课程。

余额充值