51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
/*
|
||
* @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 })))
|
||
}
|