先日、集合や族を扱うパッケージを書いていたところ、mapやsliceが混じった構造でどのようにEqualを実装するかで少しハマりました。reflect.DeepEqualの実装を見て解決したので備忘として整理します。 ちょうどGoで違うmapであることをテストする でも、同じような課題に遭遇された方がいたようです。 考え方 まず、mapのEqualを実装するときに定義する2つのmapが等しいは、大きく以下の2つになると思います。 中身の要素が同じmapは、等しい(ポインタが異なることは気にしない) 中身が同じでも、ポインタが異なれば、等しくない それぞれ、以下のように比較できます。 1. 中身の要素が同じmapは、等しい(ポインタが異なることは気にしない) この場合は、中身を比較すればいいので、reflect.DeepEqualで簡潔に書くことができます。 2. 中身が同じでも、ポインタが