如何比较两个结构,切片或映射是否相等?

我想检查两个结构,切片和映射是否相等。

但是我遇到了以下代码的问题。在相关行中查看我的评论。

package main

import (

"fmt"

"reflect"

)

type T struct {

X int

Y string

Z []int

M map[string]int

}

func main() {

t1 := T{

X: 1,

Y: "lei",

Z: []int{1, 2, 3},

M: map[string]int{

"a": 1,

"b": 2,

},

}

t2 := T{

X: 1,

Y: "lei",

Z: []int{1, 2, 3},

M: map[string]int{

"a": 1,

"b": 2,

},

}

fmt.Println(t2 == t1)

//error - invalid operation: t2 == t1 (struct containing []int cannot be compared)

fmt.Println(reflect.ValueOf(t2) == reflect.ValueOf(t1))

//false

fmt.Println(reflect.TypeOf(t2) == reflect.TypeOf(t1))

//true

//Update: slice or map

a1 := []int{1, 2, 3, 4}

a2 := []int{1, 2, 3, 4}

fmt.Println(a1 == a2)

//invalid operation: a1 == a2 (slice can only be compared to nil)

m1 := map[string]int{

"a": 1,

"b": 2,

}

m2 := map[string]int{

"a": 1,

"b": 2,

}

fmt.Println(m1 == m2)

// m1 == m2 (map can only be compared to nil)

}

http://play.golang.org/p/AZIzW2WunI

回答:

您可以使用reflect.DeepEqual,也可以实现自己的函数(在性能上比使用反射更好):

http://play.golang.org/p/CPdfsYGNy_

m1 := map[string]int{   

"a":1,

"b":2,

}

m2 := map[string]int{

"a":1,

"b":2,

}

fmt.Println(reflect.DeepEqual(m1, m2))

以上是 如何比较两个结构,切片或映射是否相等? 的全部内容, 来源链接: utcz.com/qa/410864.html

回到顶部