
डेटा मैप में फ़ाइल लोड करने के दौरान त्रुटियों को संभालना
समस्या की रूपरेखा:
यह कोड स्निपेट फ़ाइलों से डेटा को लोड करता है स्टार्टअप के दौरान एक नक्शा. हालाँकि, फ़ाइल लोडिंग के दौरान त्रुटियों का सामना करने पर इसे समस्या का सामना करना पड़ता है। समस्या इसलिए उत्पन्न होती है क्योंकि कोड प्रत्येक नई फ़ाइल को लोड करने से पहले मानचित्र को साफ़ कर देता है, जिससे त्रुटि होने पर डेटा हानि हो सकती है और पिछली मानचित्र स्थिति संरक्षित नहीं होती है।
प्रस्तावित समाधान:
इस समस्या को दूर करने के लिए, अधिक सरल दृष्टिकोण अपनाया जा सकता है:
- स्टेटलेस कॉन्फ़िगरेशन लोड हो रहा है: कैश किए जाने वाले डेटा को इनकैप्सुलेट करने के लिए एक CustomerConfig संरचना को परिभाषित करें। ]कैश प्रबंधक:
कॉन्फ़िगरेशन को प्रबंधित करने के लिए एक कॉन्फिग कैश संरचना का परिचय दें, जो सुरक्षित समवर्ती पहुंच और परिवर्तनों की निगरानी करने की क्षमता प्रदान करता है। रिफ्रेशर गोरोइन। &&&] GetConfig() विधि नवीनतम कॉन्फ़िगरेशन तक पहुंच प्रदान करती है, यह सुनिश्चित करती है कि नवीनतम डेटा हमेशा उपलब्ध रहे उपलब्ध है। कार्यान्वयन: CustomerConfig संरचना टाइप करें {
डेटा मैप[स्ट्रिंग]बूल
समय पर लोड किया गया। समय
}
func लोडकॉन्फिग() (*ग्राहककॉन्फिग, त्रुटि) {
cfg := &CustomerConfig{
डेटा: मानचित्र[स्ट्रिंग]बूल{},
लोडेडएट: समय.अभी(),
}
// फ़ाइलें लोड करें और cfg.Data भरें
// यदि त्रुटि आती है तो वापस लौटें
वापसी सीएफजी, शून्य
}
कॉन्फिग कैश संरचना टाइप करें {
configMu सिंक.RWMutex
कॉन्फिग *ग्राहक कॉन्फिग
क्लोज़Ch चान संरचना{}
}
func NewConfigCache() (*ConfigCache, त्रुटि) {
सीएफजी, त्रुटि := लोडकॉन्फिग()
यदि त्रुटि !=शून्य {
वापसी शून्य, त्रुटि
}
cc := &ConfigCache{
कॉन्फ़िगरेशन: सीएफजी,
क्लोज़सीएच: मेक(चान स्ट्रक्चर{}),
}
जाओ cc.रिफ्रेशर()
वापसी सीसी, शून्य
}
func (cc *ConfigCache) रिफ्रेशर() {
टिकर := समय.न्यूटिकर(1 * समय.मिनट)
टिकर स्थगित करें। रोकें()
के लिए {
चुनना {
केस उपयोग:- cc, err := NewConfigCache()
यदि त्रुटि !=शून्य {
// त्रुटि संभालें
}
cfg := cc.GetConfig() // नवीनतम कॉन्फ़िगरेशन तक पहुंचें