Какова причина существования этой функции?


В кодировка/формат JSON ООН экспортируемой функции reflectValue проходит на всех своих аргументов в другую функцию.

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

Вызов valueEncoder может быть сделан из любого места, где вызывается reflectValue. Какова мотивация для этой дополнительной функции ?

2 2

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-пакет не ожидается очень быстрым.