encoding/jsonでエクスポートされていないreflectValue関数は、すべての引数を別の関数に渡します。この機能が存在する理由は何ですか?
valueEncoderの呼び出しは、reflectValueが呼び出された場所から行うことができます。この追加機能の動機は何ですか?
encoding/jsonでエクスポートされていないreflectValue関数は、すべての引数を別の関数に渡します。この機能が存在する理由は何ですか?
valueEncoderの呼び出しは、reflectValueが呼び出された場所から行うことができます。この追加機能の動機は何ですか?
このメソッドは、valueEncoder(v)(e, v, opts)
への直接呼び出しで置き換えることができます。この方法は、インタフェースを満足するために必要ではなく、リフレクションによってアクセスされることもありません。
この方法はmuch longer back in 2011でした。過去の歴史のために、現在の方法がそこにあるかもしれません。また、著者は、valueEncoder(v)(e, v, opts)
をメソッドにカプセル化することで、コードの可読性が向上すると考えていた可能性もあります。
私はこのコードの著者の動機を知りません。しかし、e.reflectValue()は、このコードをより正確かつ読みやすくするヘルパー関数であると考えています。
私はこのfucntionの定義を見て:
func (e *encodeState) reflectValue(v reflect.Value, opts encOpts)
それはreflectValueは何とか値と一部のエンコードオプションを反映基づいてencodeStateを変更することを私にはかなり明確です。
私はこのdefintionを見て:
func valueEncoder(v reflect.Value) encoderFunc
私は何が起こっているのかについては考えているが、私が見るすべては、高階関数です。
関数コールはゴランでは高価ですが、エンコード/ jsonパッケージは非常に高速になるとは限りません。