如果是相同的无复杂类型的结构体创建的对象 可以直接使用 == 对比值和指针
简单类型
可排序的数据类型
整型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
}
参考 官方文档

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

被折叠的 条评论
为什么被折叠?



