Golang中如何实现struct比较?需满足哪些条件?
- 内容介绍
- 文章标签
- 相关推荐
本文共计767个文字,预计阅读时间需要4分钟。
比较时,必须同时满足以下两个硬性条件:
哪些 struct 可以直接用 == 比较
只有当结构体所有字段都属于 Go 的「可比较类型」,且变量是同一具名类型(不是底层相同但名字不同)时,== 才合法。
-
int、string、bool、float64、[3]int这类值类型可以 -
*T(指针)可以,但只比地址,不递归比内容 -
struct{}空结构体可以,所有实例彼此相等 - 嵌套 struct 也必须满足同样规则——内层类型名要一致、字段全可比
- 匿名 struct 和具名 struct 即使字段一模一样,也不能互比:
type A struct{X int}和struct{X int}是不同类型
为什么 == 突然报错:invalid operation
常见于字段含 map、[]T、func()、chan T 或未导出字段的结构体。编译器不会运行时才报错,而是在编译期直接拒绝。
本文共计767个文字,预计阅读时间需要4分钟。
比较时,必须同时满足以下两个硬性条件:
哪些 struct 可以直接用 == 比较
只有当结构体所有字段都属于 Go 的「可比较类型」,且变量是同一具名类型(不是底层相同但名字不同)时,== 才合法。
-
int、string、bool、float64、[3]int这类值类型可以 -
*T(指针)可以,但只比地址,不递归比内容 -
struct{}空结构体可以,所有实例彼此相等 - 嵌套 struct 也必须满足同样规则——内层类型名要一致、字段全可比
- 匿名 struct 和具名 struct 即使字段一模一样,也不能互比:
type A struct{X int}和struct{X int}是不同类型
为什么 == 突然报错:invalid operation
常见于字段含 map、[]T、func()、chan T 或未导出字段的结构体。编译器不会运行时才报错,而是在编译期直接拒绝。

