对应基础类型的比较,相信我们学习golang的过程中也很容易了解到

 可以比较的类型: IntegerFloatingStringBooleanComplexPointerChannelInterfaceArray

不可以比较的类型: slice,map,function

那么对于struct的实例来说,什么是可以直接比较,什么是不可以直接比较的呢

只包含可以比较类型的struct是可以直接比较的,而包含了不可比较类型的struct就不可以直接比较了 

type Node struct {
	Val int
	Data [1]int
}

func main()  {
	a := Node{Val: 1, Data: [1]int{1}}
	b := Node{Val: 1, Data: [1]int{1}}
	fmt.Println(a == b) // true
}
type Node struct {
	Val int
	Data []int
}

func main()  {
	a := Node{Val: 1, Data: []int{1}}
	b := Node{Val: 1, Data: []int{1}}
	fmt.Println(a == b) // invalid operation: a == b (struct containing []int cannot be compared)
}

但是我们需要对这种不可以直接比较的类型,又如何比较呢,答案是reflect.DeepEqual


type Node struct {
	Val int
	Data []int
}

func main()  {
	a := Node{Val: 1, Data: []int{1}}
	b := Node{Val: 1, Data: []int{1}}
	fmt.Println(reflect.DeepEqual(a, b)) // true
}