I want to check that the two structures are equal, but have some problems:
package main import ( "fmt" "reflect" ) type T struct { X int Y string Z []int M map[string]int } func main() { t1 := T{ X:1, Y:"lei", Z:[]int{1,2,3}, M:map[string]int{ "a":1, "b":2, }, } t2 := T{ X:1, Y:"lei", Z:[]int{1,2,3}, M:map[string]int{ "a":1, "b":2, }, } fmt.Println(t2 == t1) //error - invalid operation: t2 == t1 (struct containing []int cannot be compared) fmt.Println(reflect.ValueOf(t2) == reflect.ValueOf(t1)) //false fmt.Println(reflect.TypeOf(t2) == reflect.TypeOf(t1)) //true //Update: slice or map a1 := []int{1,2,3,4} a2 := []int{1,2,3,4} fmt.Println(a1==a2) //invalid operation: a1 == a2 (slice can only be compared to nil) m1 := map[string]int{ "a":1, "b":2, } m2 := map[string]int{ "a":1, "b":2, } fmt.Println(m1==m2) // m1 == m2 (map can only be compared to nil) }
http://play.golang.org/p/AZIzW2WunI
go go-reflect
leiyonglin Jul 02 '14 at 14:41 2014-07-02 14:41
source share