Antaramuka sebagai Model dalam Mgo (Go): Menyelesaikan Ralat Kebolehtugasan
Apabila berurusan dengan aliran kerja yang terdiri daripada nod pelbagai jenis, ia mungkin menggoda untuk memanfaatkan antara muka Golang untuk merangkum tingkah laku mereka yang pelbagai. Walau bagaimanapun, menyimpan aliran kerja sedemikian dalam MongoDB menimbulkan cabaran yang unik.
Isu Kebolehtugasan
Ralat yang dihadapi semasa operasi Cari berpunca daripada ketidakserasian antara dokumen yang dinyahkodkan dan Antara muka nod. Mgo kekurangan maklumat jenis yang diperlukan untuk menentukan jenis khusus setiap nod terbenam. Ini mengakibatkan ketidakpadanan tugasan.
Pendekatan Alternatif: Membenamkan dengan Maklumat Jenis
Untuk mengatasi halangan ini, pertimbangkan untuk merangkum maklumat jenis dalam nod terbenam. Tentukan struct baharu, NodeWithType, yang terdiri daripada antara muka Nod dan medan Jenis yang mewakili jenis tertentu.
<code class="go">type NodeWithType struct { Node Node `bson:"-"` Type string }</code>
Custom BSON Unmarshaling
Untuk merapatkan jurang antara dokumen yang dinyahkod dan struct Go, laksanakan fungsi SetBSON untuk NodeWithType. Fungsi ini akan menyahkod medan Jenis, mencipta contoh jenis yang sepadan dan mewakilkan unmarshaling kepadanya.
<code class="go">func (nt *NodeWithType) SetBSON(r bson.Raw) error { // Decode Type field var typeName string err := bson.Unmarshal(r["Type"], &typeName) if err != nil { return err } // Create an instance of the correct type based on Type field var node Node switch typeName { case "EmailNode": node = &EmailNode{} case "TwitterNode": node = &TwitterNode{} } // Unmarshal the remaining fields into the created instance if err = node.SetBSON(r[typeName]); err != nil { return err } // Assign the created instance to the Node field nt.Node = node return nil }</code>
Dalam struct Aliran Kerja, gantikan kepingan Nod dengan kepingan NodeWithType.
<code class="go">type Workflow struct { CreatedAt time.Time StartedAt time.Time CreatedBy string Nodes []NodeWithType }</code>
Dengan pendekatan ini, Mgo kini boleh berjaya mencari dan membongkar aliran kerja dengan nod terbenam pelbagai jenis.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menyimpan Aliran Kerja dengan Pelbagai Jenis Nod dalam MongoDB menggunakan Mgo (Go)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!