Полиморфизм в JSON в Go
newsare.net
Полиморфная сериализация JSON — частая задача при проектировании API, UI-моделей или событийных структур. Пример структуры:[ {«type»: «text&raПолиморфизм в JSON в Go
Полиморфная сериализация JSON — частая задача при проектировании API, UI-моделей или событийных структур. Пример структуры:[ {«type»: «text», «content»: «hello»}, {«type»: «image», «url»: «pic.jpg»} ]В Go такие данные принято представлять с помощью интерфейсов. Однако стандартный пакет encoding/json не умеет автоматически сериализовать и десериализовать структуры с полем-дискриминатором (например, «type»), которое определяет конкретный подтип. Приходится либо использовать громоздкие конструкции вроде map[string]any или json.RawMessage, либо вручную реализовывать интерфейсы json.Marshaler и json.Unmarshaler с разбором каждого варианта — такой подход быстро становится неудобным и слабо масштабируется.Для решения этой задачи были разработаны две библиотеки:poly — обёртка с использованием дженериков;polygen — генератор кода, расширяющий возможности poly. Почему 2 библиотеки? Read more