Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。[]int上記の変数a~dはいずれも「要素数0のint型配列」を表していますが、reflect.DeepEqualで比較してみると、すべてが同じ値というわけではないように見えました。[]intと[0]int型が区別されるのは(SliceとArrayの違いなので)ぼんやりと理解できますが、そうすると同じ型のはずの[]int{}と[]int(nil)(aとc)が区別されるのが腑に落ちません。これらの型はどう区別、比較すればいいのでしょうか?例えば、配列を返す関数をテストしたい場合に、返り値が空配列となるケースをどのようにテストすればいいのか知りたいです。変数aとcの違いは、nilかどうかです。9:36そうした方が便利かと思います。以下の様なコメントが書かれています。票5個人的には、そのまま、reflect.DeepEqualを使うのが良いと思います。問題は、「空配列」が何か、ということです。ご存知のとおり、Goにはスライスとarrayというよく似た別のものがあります。この2つは型のレベルで等しくありません。equalでない理由がこれです1。reflect.DeepEqualのgodocには次のように書かれています。equal.変数aとcの違いは、nilかどうかです1。equalではありません。c)はfalseを返します。equalになります。aからdまでの変数の中で、空の(non-nilな)スライスはaだけ、空の(non-nilな)arrayはbだけということになります。今回の場合、テストに用いたいということですので、nilかnilでないか、スライスかarrayかは、大きな違いになると思います。したがって、そのままreflect.DeepEqualを使って、厳密にどれになるのかを検査するのが良いのではないかと思います。