Z důvodu, který jste uvedli, nemůžete v dokumentu použít rozhraní. Dekodér nemá žádné informace o typu, který má vytvořit.
Jedním ze způsobů, jak to zvládnout, je definovat strukturu, která bude obsahovat informace o typu:
type NodeWithType struct {
Node Node `bson:"-"`
Type string
}
type Workflow struct {
CreatedAt time.Time
StartedAt time.Time
CreatedBy string
Nodes []NodeWithType
}
Na tomto typu implementujte funkci SetBSON. Tato funkce by měla dekódovat typový řetězec, vytvořit hodnotu správného typu na základě tohoto řetězce a zrušit řazení na tuto hodnotu.
func (nt *NodeWithType) SetBSON(r bson.Raw) error {
}