feat(Go-StudyExample):2020/12/31:新增【Go每日一库】go-cmp结构体比较工具
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* @Author : huangzj
|
||||
* @Time : 2020/12/30 14:08
|
||||
* @Description:map和切片的比较方法
|
||||
*/
|
||||
|
||||
package go_cmp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/google/go-cmp/cmp/cmpopts"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNilEqualEmpty(t *testing.T) {
|
||||
var s1 []int
|
||||
var s2 = make([]int, 0)
|
||||
|
||||
var m1 map[int]int
|
||||
var m2 = make(map[int]int)
|
||||
|
||||
//Go原生的" == "符号是没办法比较 切片和map的.
|
||||
//fmt.Println(s1 == s2)
|
||||
//fmt.Println(m1 == m2)
|
||||
|
||||
//这边可以通过Equal来比较 切片和map
|
||||
fmt.Println("s1 equals s2?", cmp.Equal(s1, s2))
|
||||
fmt.Println("m1 equals m2?", cmp.Equal(m1, m2))
|
||||
|
||||
//空的切片和nil如果要比较相等,需要加上对应的参数
|
||||
fmt.Println("s1 equals s2 with option?", cmp.Equal(s1, s2, cmpopts.EquateEmpty()))
|
||||
fmt.Println("m1 equals m2 with option?", cmp.Equal(m1, m2, cmpopts.EquateEmpty()))
|
||||
|
||||
}
|
||||
|
||||
//比较无序的切片,和本来就没有顺序的map
|
||||
func TestSliceOutOfOrder(t *testing.T) {
|
||||
s1 := []int{1, 2, 3, 4}
|
||||
s2 := []int{4, 3, 2, 1}
|
||||
fmt.Println("s1 equals s2?", cmp.Equal(s1, s2))
|
||||
fmt.Println("s1 equals s2 with option?", cmp.Equal(s1, s2, cmpopts.SortSlices(func(i, j int) bool { return i < j })))
|
||||
|
||||
fmt.Println()
|
||||
|
||||
m1 := map[int]int{1: 10, 2: 20, 3: 30}
|
||||
m2 := map[int]int{1: 10, 2: 20, 3: 30}
|
||||
fmt.Println("m1 equals m2?", cmp.Equal(m1, m2))
|
||||
fmt.Println("m1 equals m2 with option?", cmp.Equal(m1, m2, cmpopts.SortMaps(func(i, j int) bool { return i < j })))
|
||||
}
|
||||
Reference in New Issue
Block a user