Files
Go-StudyExample/example/go-cmp/SliceMap_test.go
T

51 lines
1.4 KiB
Go
Raw Normal View History

/*
* @Author : huangzj
* @Time : 2020/12/30 14:08
* @Descriptionmap和切片的比较方法
*/
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 })))
}