这个功能存在的原因是什么?
What's a reason for this function to exist?
在 encoding/json 中,未导出的 reflectValue 函数将其所有参数传递给另一个函数。
func(e *encodeState) reflectValue(v reflect.Value, opts encOpts)
{
valueEncoder(v)(e, v, opts)
}
可以从任何调用 reflectValue 的地方调用 valueEncoder。这个附加功能的动机是什么?
我不知道这段代码作者的动机。但我想 e.reflectValue() 是一个辅助函数,它使这段代码更简洁和可读。
当我查看这个函数的定义时:
func (e *encodeState) reflectValue(v reflect.Value, opts encOpts)
我很清楚 reflectValue 会根据反射值和一些编码选项以某种方式更改 encodeState。
当我看到这个定义时:
func valueEncoder(v reflect.Value) encoderFunc
我不知道发生了什么,我看到的只是一个 higher-order 函数。
函数调用在 golang 中很昂贵,但 encoding/json 包预计不会很快。
该方法可以通过直接调用 valueEncoder(v)(e, v, opts)
来代替。该方法不需要满足接口,也不是通过反射访问的。
方法是much longer back in 2011。目前的方法可能是因为过去的历史。也有可能是作者认为把valueEncoder(v)(e, v, opts)
封装在一个方法中,提高代码可读性。
在 encoding/json 中,未导出的 reflectValue 函数将其所有参数传递给另一个函数。
func(e *encodeState) reflectValue(v reflect.Value, opts encOpts)
{
valueEncoder(v)(e, v, opts)
}
可以从任何调用 reflectValue 的地方调用 valueEncoder。这个附加功能的动机是什么?
我不知道这段代码作者的动机。但我想 e.reflectValue() 是一个辅助函数,它使这段代码更简洁和可读。
当我查看这个函数的定义时:
func (e *encodeState) reflectValue(v reflect.Value, opts encOpts)
我很清楚 reflectValue 会根据反射值和一些编码选项以某种方式更改 encodeState。
当我看到这个定义时:
func valueEncoder(v reflect.Value) encoderFunc
我不知道发生了什么,我看到的只是一个 higher-order 函数。
函数调用在 golang 中很昂贵,但 encoding/json 包预计不会很快。
该方法可以通过直接调用 valueEncoder(v)(e, v, opts)
来代替。该方法不需要满足接口,也不是通过反射访问的。
方法是much longer back in 2011。目前的方法可能是因为过去的历史。也有可能是作者认为把valueEncoder(v)(e, v, opts)
封装在一个方法中,提高代码可读性。