Как можно ускорить стандартную сериализацию JSON

«Как можно ускорить стандартную сериализацию JSON» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Используйте json.Encoder вместо json.Marshal для потоковой записи, избегая лишних аллокаций. Для структур с фиксированными полями — генерируйте код сериализации (например, через easyjson).

Оптимизации:

  1. Предварительно аллоцируйте буфер (bytes.Buffer с нужным capacity)
  2. Используйте json.RawMessage для уже сериализованных частей
  3. Избегайте interface{} — явные типы быстрее

Пример с Encoder:

var buf bytes.Buffer
enc := json.NewEncoder(&buf)
enc.SetEscapeHTML(false) // Ускоряет запись
if err := enc.Encode(data); err != nil {
    // обработка ошибки
}

Для максимальной скорости — рассмотрите бинарные протоколы (Protocol Buffers, MessagePack).