美文网首页
go-cmp reflect.DeepEqual Slice F

go-cmp reflect.DeepEqual Slice F

作者: allenhaozi | 来源:发表于2019-12-15 12:35 被阅读0次

    单测是遇到对比两个slice时, 因为元素是无序的, 导致相等的item, 判断失败
    代码如下:

    package main
    
    import (
        "fmt"
        "github.com/google/go-cmp/cmp"
    )
    type Item struct {
        Media string
        Size  int64
    }
    func main() {
        standard := []Item{
            Item{
                Media: "SSD",
                Size:  100,
            },
            Item{
                Media: "HDD",
                Size:  200,
            },
        }
        test1 := []Item{
            Item{
                Media: "HDD",
                Size:  200,
            },
            Item{
                Media: "SSD",
                Size:  100,
            },
        }
        fmt.Println(cmp.Equal(standard, test1)) // false 
    }
    

    期望是: true, 但是实际: false

    cmp的Equal方法提供了 opts自定义函数

    trans := cmp.Transformer(
            "Sort",
            func(in []Item) []Item {
                sort.Slice(
                    in, 
                    func(i, j int) bool {
                        return in[i].Size < in[j].Size
                    })  
                return in
            }) 
    
    fmt.Println(cmp.Equal(standard, test1,trans)) // true
    

    相关文章

      网友评论

          本文标题:go-cmp reflect.DeepEqual Slice F

          本文链接:https://www.haomeiwen.com/subject/qjmknctx.html