Какова причина существования этой функции?
В кодировка/формат JSON ООН экспортируемой функции reflectValue проходит на всех своих аргументов в другую функцию.
func(e *encodeState) reflectValue(v reflect.Value, opts encOpts)
{
valueEncoder(v)(e, v, opts)
}
Вызов valueEncoder может быть сделан из любого места, где вызывается reflectValue. Какова мотивация для этой дополнительной функции ?
2 ответа:
Метод может быть заменен прямыми вызовами
valueEncoder(v)(e, v, opts)
. Метод не нужен для удовлетворения интерфейса, и он не доступен через отражение.Метод былнамного длиннее еще в 2011 году . Нынешний метод может быть там из-за прошлой истории. Возможно также, что автор считал, что читаемость кода улучшается путем инкапсуляции
valueEncoder(v)(e, v, opts)
в методе.
Я не знаю мотивации автора этого кода. Но я полагаю, что e. reflectValue () является вспомогательной функцией, которая делает этот код более точным и читаемым.
Когда я смотрю на определение этого fucntion:
func (e *encodeState) reflectValue(v reflect.Value, opts encOpts)
Мне совершенно ясно, что reflectValue каким-то образом изменяет encodeState на основе reflect value и некоторых опций кодирования.
Когда я смотрю на это определение:
Я понятия не имею о том, что происходит, все, что я вижу-это высший порядок. функция.func valueEncoder(v reflect.Value) encoderFunc
Вызовы функций в golang стоят дорого, но кодирование/JSON-пакет не ожидается очень быстрым.