5

さまざまなタイプの複数の組み込みノードで構成されるワークフローがあるとします。ノードはさまざまなタイプであるため、ここで 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 構造体にアンマーシャリングする方法は、私には少し奇妙に感じます。問題を別の観点から見る必要があるかもしれません。

どんな提案でも大歓迎です。

4

2 に答える 2