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 }
セットアップを完了するには、NodeWithType に SetBSON 関数を実装する必要があります。この関数は、タイプ文字列をデコードし、その文字列に基づいて正しいノード タイプをインスタンス化し、ドキュメントを新しく作成されたインスタンスにアンマーシャリングします。 SetBSON を実装すると、埋め込まれた各ノードが正しい具象型に適切にアンマーシャリングされることが保証されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3