You should use reflect.DeepEqual()
DeepEqual is a recursive relaxation of Go’s == operator.
DeepEqual reports whether x and y are “deeply equal,” defined as
follows. Two values of identical type are deeply equal if one of the
following cases applies. Values of distinct types are never deeply
equal.Array values are deeply equal when their corresponding elements are
deeply equal.Struct values are deeply equal if their corresponding fields, both
exported and unexported, are deeply equal.Func values are deeply equal if both are nil; otherwise they are not
deeply equal.Interface values are deeply equal if they hold deeply equal concrete
values.Map values are deeply equal if they are the same map object or if they
have the same length and their corresponding keys (matched using Go
equality) map to deeply equal values.Pointer values are deeply equal if they are equal using Go’s ==
operator or if they point to deeply equal values.Slice values are deeply equal when all of the following are true: they
are both nil or both non-nil, they have the same length, and either
they point to the same initial entry of the same underlying array
(that is, &x[0] == &y[0]) or their corresponding elements (up to
length) are deeply equal. Note that a non-nil empty slice and a nil
slice (for example, []byte{} and []byte(nil)) are not deeply equal.Other values – numbers, bools, strings, and channels – are deeply
equal if they are equal using Go’s == operator.