Ответ
Используйте json.Encoder вместо json.Marshal для потоковой записи, избегая лишних аллокаций. Для структур с фиксированными полями — генерируйте код сериализации (например, через easyjson).
Оптимизации:
- Предварительно аллоцируйте буфер (
bytes.Bufferс нужным capacity) - Используйте
json.RawMessageдля уже сериализованных частей - Избегайте
interface{}— явные типы быстрее
Пример с Encoder:
var buf bytes.Buffer
enc := json.NewEncoder(&buf)
enc.SetEscapeHTML(false) // Ускоряет запись
if err := enc.Encode(data); err != nil {
// обработка ошибки
}
Для максимальной скорости — рассмотрите бинарные протоколы (Protocol Buffers, MessagePack).