Загрузка…
Загрузка…
json.Marshal и json.Encoder выполняют аналогичную задачу сериализации, но имеют другую модель памяти и ввода-вывода. Выбор зависит от того, хотите ли вы готовый []byte или потоковую передачу напрямую на io.Writer.
json.Marshal:Возвращает сериализованный JSON как []byte.
Удобно, когда нужно:
получить массив байтов для дальнейшей обработки;
регистрировать/подписывать/сжимать полезную нагрузку перед отправкой;
работа с JSON в памяти.
json.Encoder:Немедленно записывает JSON в io.Writer (http.ResponseWriter, файл, сокет).
Подходит для потоковой передачи сценариев и больших ответов.
Часто более удобен в обработчиках HTTP, поскольку сокращает промежуточные buffers.
Encode добавляет в конец символ новой строки (это важно отметить).
Требовать JSON в качестве значения в коде → json.Marshal.
Необходимо немедленно написать в поток/ответ → json.NewEncoder(w).Encode(...).
Marshal — «формировать JSON в памяти», Encoder — «записывать JSON в поток». Функционально они близки, но с точки зрения ресурсов и архитектуры ввода-вывода разница принципиальна.
json.Marshal и json.Encoder выполняют аналогичную задачу сериализации, но имеют другую модель памяти и ввода-вывода.
