एमजीओ मॉडल में इंटरफ़ेस प्रकारों को समझना
MongoDB और Go के संदर्भ में, इंटरफ़ेस के साथ मॉडलिंग डेटा गतिशील प्रकृति के कारण चुनौतियां पेश कर सकता है इंटरफ़ेस का. यहां आपके सामने आई समस्या का संक्षिप्त विवरण और एक सुझाया गया समाधान दिया गया है।
इंटरफ़ेस प्रकार के साथ समस्या
MongoDB का दस्तावेज़-आधारित डेटा मॉडल प्रकार प्रदान नहीं करता है एम्बेडेड दस्तावेज़ों के लिए जानकारी. गो संरचनाओं में इंटरफ़ेस प्रकारों वाले MongoDB दस्तावेज़ों को अनमर्शल करने के लिए mgo का उपयोग करते समय, mgo प्रत्येक एम्बेडेड दस्तावेज़ के विशिष्ट प्रकार को निर्धारित नहीं कर सकता है। इसके परिणामस्वरूप त्रुटि उत्पन्न होती है "प्रकार bson.M का मान नोड टाइप करने के लिए निर्दिष्ट नहीं है।"
समाधान: रैपिंग इंटरफ़ेस प्रकार
इस सीमा को संबोधित करने के लिए, एक दृष्टिकोण इंटरफ़ेस प्रकार को एक कस्टम संरचना में लपेटना है जो प्रकार की जानकारी प्रदान करता है। यह एमजीओ को अनमर्शलिंग के दौरान एम्बेडेड दस्तावेज़ के विशिष्ट प्रकार की पहचान करने की अनुमति देता है।
निम्न उदाहरण पर विचार करें:
type NodeWithType struct {
Node Node `bson:"-"`
Type string
}
type Workflow struct {
CreatedAt time.Time
StartedAt time.Time
CreatedBy string
Nodes []NodeWithType
}
SetBSON फ़ंक्शन को कार्यान्वित करना
इस समाधान को पूरा करने के लिए, आपको NodeWithType प्रकार के लिए SetBSON फ़ंक्शन को कार्यान्वित करना होगा। यह फ़ंक्शन टाइप स्ट्रिंग को डीकोड करेगा, संबंधित प्रकार का एक उदाहरण बनाएगा, और इसे अनमर्शल करेगा।
func (nt *NodeWithType) SetBSON(r bson.Raw) error {
// Decode the "Type" field and determine the Node type
var typeStr string
if err := r.Unmarshal(&typeStr); err != nil {
return err
}
// Create a new instance of the Node type based on the type string
node, ok := reflect.New(reflect.TypeOf(Node).Elem()).Interface().(Node)
if !ok {
return errors.New("invalid Node type")
}
// Unmarshal the remaining data into the Node instance
if err := r.Unmarshal(node); err != nil {
return err
}
// Assign the Node instance to the NodeWithType struct
nt.Node = node
return nil
}
निष्कर्ष
इस पैटर्न का उपयोग आपको विभिन्न प्रकार के एम्बेडेड दस्तावेज़ों को अनमर्शल करने की क्षमता बनाए रखते हुए इंटरफेस का प्रभावी ढंग से उपयोग करने में सक्षम बनाता है। स्पष्ट प्रकार की जानकारी प्रदान करके, एमजीओ इन दस्तावेज़ों को वांछित गो संरचनाओं में निर्बाध रूप से डिकोड कर सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3