2017-02-04 13 views

答えて

2

このメソッドは、valueEncoder(v)(e, v, opts)への直接呼び出しで置き換えることができます。この方法は、インタフェースを満足するために必要ではなく、リフレクションによってアクセスされることもありません。

この方法はmuch longer back in 2011でした。過去の歴史のために、現在の方法がそこにあるかもしれません。また、著者は、valueEncoder(v)(e, v, opts)をメソッドにカプセル化することで、コードの可読性が向上すると考えていた可能性もあります。

1

私はこのコードの著者の動機を知りません。しかし、e.reflectValue()は、このコードをより正確かつ読みやすくするヘルパー関数であると考えています。

私はこのfucntionの定義を見て:

func (e *encodeState) reflectValue(v reflect.Value, opts encOpts) 

それはreflectValueは何とか値と一部のエンコードオプションを反映基づいてencodeStateを変更することを私にはかなり明確です。

私はこのdefintionを見て:

func valueEncoder(v reflect.Value) encoderFunc 

私は何が起こっているのかについては考えているが、私が見るすべては、高階関数です。

関数コールはゴランでは高価ですが、エンコード/ jsonパッケージは非常に高速になるとは限りません。

関連する問題