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

    科技2023-11-24  73

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

    简单类型

    可排序的数据类型

    整型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 }

    参考 官方文档

    Processed: 0.014, SQL: 8