对应基础类型的比较,相信我们学习golang的过程中也很容易了解到
可以比较的类型: Integer,Floating,String,Boolean,Complex,Pointer,Channel,Interface,Array
不可以比较的类型: 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
}