go中的struct 能不能比较

参考解析

题目来源:腾讯

答案1:

  1. 不同类型的 struct 之间不能进行比较,编译期就会报错(GoLand 会直接提示)

  2. 同类型的 struct 也分为两种情况,

    • struct 的所有成员都是可以比较的,则该 strcut 的不同实例可以比较

    • struct 中含有不可比较的成员(如 Slice),则该 struct 不可以比较

  1. **同类型 struct 比较**
  1. import "fmt"
  2. type A struct {
  3. age int
  4. name string
  5. }
  6. func StructCompare1() {
  7. aObj1 := A{
  8. age: 13,
  9. name: "张三",
  10. }
  11. aObj2 := A{
  12. age: 13,
  13. name: "张三",
  14. }
  15. fmt.Println(aObj1 == aObj2) // true
  16. aObj3 := &A{
  17. age: 13,
  18. name: "张三",
  19. }
  20. aObj4 := &A{
  21. age: 13,
  22. name: "张三",
  23. }
  24. fmt.Println(aObj3 == aObj4) // false
  25. var aObj5 A
  26. fmt.Println(aObj5) //{0 } ,未明确初始化时,struct 实例的成员取各自的零值
  27. //fmt.Println( aObj5 == nil) // 报错,无法将 nil 转换为类型 A
  28. var aObj6 *A
  29. fmt.Println(aObj6) // <nil> ,指针类型数据的零值为 nil
  30. fmt.Println(aObj6 == nil) // true,指针类型的数据可以和 nil 比较
  31. }

struct 包含不可比较的成员,如map,slice

image-20220417213758596

不同类型 struct 不能比较

image-20220417213820375