Предположим, что у вас есть рабочий процесс, состоящий из нескольких внедренных узлов разных типов. Поскольку узлы различных типов, я думал об использовании интерфейсов Golang здесь и придумал следующее:Как использовать тип интерфейса в качестве модели в mgo (Go)?
type Workflow struct {
CreatedAt time.Time
StartedAt time.Time
CreatedBy string
Nodes []Node
}
type Node interface {
Exec() (int, error)
}
type EmailNode struct {
From string
To string
Subject string
Body string
}
type TwitterNode struct {
Tweet string
Image []byte
}
func (n *EmailNode) Exec() (int, error){
//send email
return 0, nil
}
func (n *TwitterNode) Exec() (int, error) {
//send tweet
return 0, nil
}
Эти рабочие процессы хранятся в MongoDB и у меня есть образец данных семян в нем. Использование оксида магния, когда я пытаюсь найти рабочий процесс (учитывая его ID):
w = &Workflow{}
collection.FindID(bson.ObjectIdHex(id)).One(w)
Я получаю ошибку - значение типа bson.M не может быть назначен на тип узла.
Это также немного странно для меня, что как бы mgo не подключил встроенные документы Node в структуру Go без какой-либо информации о типе. Может быть, мне нужно взглянуть на проблему с другой точки зрения.
Любые предложения будут высоко оценены.
Отлично! Это работает. Ухоженная. – shardnit
Можете ли вы привести пример того, как будет реализована функция setBSON? Я не знаю, как декодировать строку типа. – e3matheus