さまざまなタイプの複数の組み込みノードで構成されるワークフローがあるとします。ノードはさまざまなタイプであるため、ここで Golang インターフェイスを使用することを考え、次のように思いつきました。
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 に保存されており、サンプルのシード データが含まれています。mgo を使用して、ワークフローを見つけようとすると (ID が与えられます):
w = &Workflow{}
collection.FindID(bson.ObjectIdHex(id)).One(w)
エラーが表示されます - タイプ bson.M の値はタイプ ノードに割り当てられません。
また、埋め込まれた Node ドキュメントを型情報なしで Go 構造体にアンマーシャリングする方法は、私には少し奇妙に感じます。問題を別の観点から見る必要があるかもしれません。
どんな提案でも大歓迎です。