go 1.14.3 で確認した内容で個人的なメモです.
使っているバージョンによって異なる可能性があるので一次情報を参照してください.
ソースコード上では encodeState の error が呼び出されているところを確認すれば良いと思われます.
エラーを返すパターン
主観ですが遭遇しそうな順で書きます.
- floatがInf, NaNだったときの
json.UnsupportedValueError - ポインタの循環参照のときに発生する
json.UnsupportedValueError json.Marshaler,encoding.TextMarshalerのMarshal失敗したときのjson.MarshalerError- mapのkeyがint, uint, string, ptrではなく,
encoding.TextMarshalerが実装されていないときのjson.UnsupportedTypeError - mapのkeyが
encoding.TextMarshalerを実装していて, marshalに失敗したときのfmt.Errorf("json: encoding error for type: %q") json.Numberで不正な数字列だったときのfmt.Errorf("json: invalid number literal: %q")
ハマりそうなポイント
mapのkeyの encoding.TextMarshaler が失敗したときのエラーは json.MarshalerError ではない.
json.Number をMarshalしたときに文字列が数値として正しくない場合に json パッケージのエラーは返ってこない.