एमजीओ (गो) में मॉडल के रूप में इंटरफ़ेस: असाइनमेंट त्रुटि को हल करना
विभिन्न प्रकार के नोड्स वाले वर्कफ़्लो से निपटते समय, यह हो सकता है अपने विविध व्यवहारों को समाहित करने के लिए गोलांग इंटरफेस का लाभ उठाने का प्रलोभन। हालाँकि, MongoDB में इस तरह के वर्कफ़्लो को संग्रहीत करना एक अनोखी चुनौती है। नोड इंटरफ़ेस. एमजीओ में प्रत्येक एम्बेडेड नोड के विशिष्ट प्रकार को निर्धारित करने के लिए आवश्यक प्रकार की जानकारी का अभाव है। इसके परिणामस्वरूप असाइनमेंट बेमेल हो जाता है।
वैकल्पिक दृष्टिकोण: प्रकार की जानकारी के साथ एम्बेड करना
इस बाधा को दूर करने के लिए, एम्बेडेड नोड्स के भीतर प्रकार की जानकारी को एनकैप्सुलेट करने पर विचार करें। एक नई संरचना, नोडविथटाइप को परिभाषित करें, जिसमें नोड इंटरफ़ेस और विशिष्ट प्रकार का प्रतिनिधित्व करने वाला एक प्रकार फ़ील्ड शामिल है।
टाइप नोडविथटाइप संरचना { नोड नोड `बीएसओएन:"-"` स्ट्रिंग टाइप करें }
कस्टम BSON अनमर्शलिंग
type NodeWithType struct {
Node Node `bson:"-"`
Type string
}
func (nt *NodeWithType) SetBSON(r bson.Raw) error { // डिकोड प्रकार फ़ील्ड var टाइपनेम स्ट्रिंग err := bson.Unmarshal(r["Type"], &typeName) यदि त्रुटि !=शून्य { ग़लती से वापसी } // टाइप फ़ील्ड के आधार पर सही प्रकार का एक उदाहरण बनाएं वर नोड नोड प्रकारनाम स्विच करें { मामला "ईमेलनोड": नोड = &ईमेलनोड{} मामला "ट्विटरनोड": नोड = &TwitterNode{} } // बनाए गए उदाहरण में शेष फ़ील्ड को अनमर्शल करें यदि err = node.SetBSON(r[typeName]); त्रुटि != शून्य { ग़लती से वापसी } // बनाए गए इंस्टेंस को नोड फ़ील्ड में असाइन करें एनटी.नोड = नोड शून्य वापसी }
वर्कफ़्लो संरचना में, नोड स्लाइस को नोडविथटाइप के एक स्लाइस से बदलें।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
}
इस दृष्टिकोण के साथ, एमजीओ अब विभिन्न प्रकार के एम्बेडेड नोड्स के साथ वर्कफ़्लो को सफलतापूर्वक ढूंढ और अनमर्शल कर सकता है। अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3