我们可以直接使用reflect.DeepEqual来比较两个slice、struct或者map是否相等
package mainimport ( "fmt" "reflect")type A struct { s string}func main() { a1 := A{s: "abc"} a2 := A{s: "abc"} if reflect.DeepEqual(a1, a2) { fmt.Println(a1, "==", a2) } b1 := []int{ 1, 2} b2 := []int{ 1, 2} if reflect.DeepEqual(b1, b2) { fmt.Println(b1, "==", b2) } c1 := map[string]int{ "a": 1, "b": 2} c2 := map[string]int{ "a": 1, "b": 2} if reflect.DeepEqual(c1, c2) { fmt.Println(c1, "==", c2) }}
对于slice,我们还可以使用另外一种方法:
func stringSliceEqualBCE(a, b []string) bool { if len(a) != len(b) { return false } if (a == nil) != (b == nil) { return false } b = b[:len(a)] for i, v := range a { if v != b[i] { return false } } return true}