Sie sollten reflect.DeepEqual() verwenden
DeepEqual ist eine rekursive Entspannung des == Operators in Go.
DeepEqual gibt zurück, ob x und y "tiefgleich" sind, definiert als folgt. Zwei Werte des identischen Typs sind tiefgleich, wenn einer der folgenden Fälle zutrifft. Werte von unterschiedlichen Typen sind niemals tiefgleich.
Array-Werte sind tiefgleich, wenn ihre entsprechenden Elemente tiefgleich sind.
Struct-Werte sind tiefgleich, wenn ihre entsprechenden Felder, sowohl exportierte als auch nicht exportierte, tiefgleich sind.
Func-Werte sind tiefgleich, wenn beide nil sind; andernfalls sind sie nicht tiefgleich.
Interface-Werte sind tiefgleich, wenn sie tiefgleiche konkrete Werte halten.
Map-Werte sind tiefgleich, wenn sie dasselbe Map-Objekt sind oder wenn sie die gleiche Länge haben und ihre entsprechenden Schlüssel (mit Go-Äquivalenz abgeglichen) auf tiefgleiche Werte abbilden.
Pointer-Werte sind tiefgleich, wenn sie mit dem == Operator gleich sind oder wenn sie auf tiefgleiche Werte zeigen.
Slice-Werte sind tiefgleich, wenn alle der folgenden Bedingungen erfüllt sind: sie sind beide nil oder beide nicht nil, sie haben die gleiche Länge, und entweder sie zeigen auf den gleichen Anfangseintrag des gleichen zugrundeliegenden Arrays (d.h., &x[0] == &y[0]) oder ihre entsprechenden Elemente (bis zur Länge) sind tiefgleich. Beachten Sie, dass ein nicht-nil leerer Slice und ein nil Slice (zum Beispiel, []byte{} und []byte(nil)) nicht tiefgleich sind.
Andere Werte - Zahlen, Bools, Strings und Channels - sind tiefgleich, wenn sie mit dem == Operator in Go gleich sind.