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 }
Toセットアップが完了したら、NodeWithType に SetBSON 関数を実装する必要があります。この関数は、タイプ文字列をデコードし、その文字列に基づいて正しいノード タイプをインスタンス化し、ドキュメントを新しく作成されたインスタンスにアンマーシャリングします。 SetBSON を実装すると、埋め込まれた各ノードが正しい具象型に適切にアンマーシャリングされることが保証されます。
以上がmgo (Go) のインターフェイスを使用して、さまざまなタイプの組み込みノードをアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。