回答

收藏

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

技术问答 技术问答 245 人阅读 | 0 人回复 | 2023-09-12

我想检查两种结构、切片和映射是否相等。; c. l/ Y$ [  ]0 j- J# G. X
但是我遇到了以下代码的问题。在相关银行查看我的评论。
& I0 z  c  t+ b2 J
    package mainimport  "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)}
      `: r+ o4 v$ N5 {2 ?, x
http://play.golang.org/p/AZIzW2WunI
& m3 T" D5 d8 G. k                                                               
; n1 v) q% Z+ m    解决方案:                                                               
7 w. b$ U6 b- w* }) y                                                                您可以使用reflect.DeepEqual,或者你可以实现己的功能(性能优于反射):# b! N+ z7 d" U9 z, a
http://play.golang.org/p/CPdfsYGNy_
2 g2 Z. ]* ]  R, f1 {( j9 t
    m1 := map[string]int{        "a":1,   "b":2,}m2 := map[string]int{        "a":1,   "b":2,}fmt.Println(reflect.DeepEqual(m1,m2))  `) R+ o8 B* N& G
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则