«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как демаршалировать встроенные узлы разных типов с помощью интерфейсов в mgo (Go)?

Как демаршалировать встроенные узлы разных типов с помощью интерфейсов в mgo (Go)?

Опубликовано 10 ноября 2024 г.
Просматривать:283

 How to Unmarshal Embedded Nodes of Different Types Using Interfaces in mgo (Go)?

Как использовать интерфейс в качестве модели в 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