Go言語の json.Unmarshal で読み込んだデータをテストするときは数値の型に注意する
以下のようなコードで interface{}
に対し数値を読み込んだ際、
数値の型は float64
になります。
(参考: 公式ドキュメント)
var got []interface{}
json.Unmarshal([]byte("[1,2,null]", &got)
しかし、これをテストするために比較対象のデータをリテラルとして用意すると、
want := []interface{}{1,2,nil}
定数のデフォルト型の宿命で数値の型が int
になってしまうため、reflect.DeepEqual
などの比較において失敗してしまいます。
解決策
解決策としては以下の2つかな、と考えており、(2)のほうは煩雑なので今のところ(1)でやっています。
- テストデータも
json.Unmarshal
で作る - 明示的に
float64(1)
として変換する
コードの挙動確認
以下でコードの挙動を確認できます。 The Go Playground