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

51 lines
1.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* @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 })))
}