Как использовать интерфейс в качестве модели в mgo (Go)
При работе с рабочими процессами, содержащими несколько встроенных узлов разных типов, использование интерфейсов Go — распространенный подход. Однако при попытке демаршалинга этих документов с помощью mgo возникают проблемы.
Чтобы решить эту проблему, вы не можете напрямую включать интерфейс в документ. Это связано с тем, что декодеру не хватает необходимой информации о типе для создания соответствующего экземпляра.
Жизнеспособное решение включает создание структуры-оболочки для хранения как фактического узла, так и его типа:
type NodeWithType struct { Node Node `bson:"-"` Type string } type Workflow struct { CreatedAt time.Time StartedAt time.Time CreatedBy string Nodes []NodeWithType }
Для завершения настройки необходимо реализовать функцию SetBSON в NodeWithType. Эта функция декодирует строку типа, создаст экземпляр правильного типа узла на основе этой строки, а затем демаршалирует документ во вновь созданный экземпляр. Реализация SetBSON гарантирует, что каждый встроенный узел правильно демаршалируется в правильный конкретный тип.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3