1. सिंगलटन पैटर्न क्या है
सिंगलटन पैटर्न एक सृजनात्मक डिज़ाइन पैटर्न है जो सुनिश्चित करता है कि एक क्लास में केवल एक उदाहरण होता है और उस उदाहरण को प्राप्त करने के लिए एक वैश्विक पहुंच बिंदु प्रदान करता है। सिंगलटन पैटर्न आमतौर पर उन स्थितियों में प्रयोग किया जाता है जहाँ संसाधन साझा करने या विशेष उदाहरण तक पहुंच को नियंत्रित करने की आवश्यकता होती है।
2. सिंगलटन पैटर्न की विशेषताएँ और फायदे
सिंगलटन पैटर्न की निम्नलिखित विशेषताएँ और फायदे हैं:
- सुनिश्चित करता है कि क्लास में केवल एक उदाहरण वस्तु हो
- बाहरी कोड को उदाहरण प्राप्त करने के लिए एक वैश्विक पहुंच प्रदान करता है
- उदाहरणों की दोहराना रोककर सिस्टम संसाधनों को बचाता है
3. सिंगलटन पैटर्न के अनुप्रयोग स्थल
सिंगलटन पैटर्न निम्नलिखित अनुप्रयोग स्थलों के लिए उपयुक्त है:
- लॉगर: इस सुनिश्चित करना कि पूरे सिस्टम के लिए केवल एक लॉगर होता है ताकि डुप्लिकेट लॉगिंग न हो।
- डेटाबेस कनेक्शन पूल: उच्च-संवेग माहौल में, सिंगलटन पैटर्न का उपयोग करके डेटाबेस कनेक्शन के निरंतर निर्माण और नष्ट को बचाया जा सकता है।
4. जीओलैंग में सिंगलटन पैटर्न का अमलन
जीओलैंग में, सिंगलटन पैटर्न को अमल में लाने के लिए विभिन्न तरीके हैं। नीचे दो सामान्य अमलन विधियाँ हैं।
4.1. आलसी प्रारंभीकरण और उत्सुक प्रारंभीकरण का उपयोग करके कार्यान्वयन
आलसी प्रारंभीकरण पहली बार उपयोग में आने पर उदाहरण वस्तु बनाता है, जबकि उत्सुक प्रारंभीकरण कार्यक्रम शुरू होने पर उदाहरण वस्तु बनाता है।
// आलसी प्रारंभीकरण सिंगलटन पैटर्न का कार्यान्वयन
package singleton
type Singleton struct {
}
var instance *Singleton
func GetInstance() *Singleton {
if instance == nil {
instance = &Singleton{}
}
return instance
}
// उत्सुक प्रारंभीकरण सिंगलटन पैटर्न का कार्यान्वयन
package singleton
type Singleton struct {
}
var instance *Singleton = &Singleton{}
func GetInstance() *Singleton {
return instance
}
4.2. सिंगलटन पैटर्न में धागा सुरक्षा समस्याएँ
उपर्युक्त आलसी प्रारंभीकरण के कार्यान्वयन विधि में, बहु-सूत्रीय वातावरण में समस्याएँ हो सकती हैं क्योंकि कई सूत्र एक साथ-साथ if instance == nil
स्थिति में प्रवेश कर सकते हैं, जिससे कई उदाहरण बनाए जा सकते हैं।
4.3. sync.Once का उपयोग करके सुरक्षित-सूत्र सिंगलटन पैटर्न का कार्यान्वयन
sync.Once
का उपयोग करने से निश्चित होता है कि केवल एक गोरूटीन निवेशन कोड को निष्पादित करता है, जिससे सूत्र सुरक्षा समस्या का समाधान हो जाता है।
// sync.Once का उपयोग करके सुरक्षित सिंगलटन पैटर्न का कार्यान्वयन
package singleton
import (
"sync"
)
type Singleton struct {
}
var instance *Singleton
var once sync.Once
func GetInstance() *Singleton {
once.Do(func() {
instance = &Singleton{}
})
return instance
}
4.4. sync.Mutex का उपयोग करके सुरक्षित आलसी प्रारंभीकरण सिंगलटन पैटर्न का कार्यान्वयन
एक और तरीका सुरक्षित आलसी प्रारंभीकरण सिंगलटन पैटर्न को कार्यान्वयन करने के लिए sync.Mutex
का उपयोग करके केवल एक गोरूटीन को आक्षेपित करने के लिए बांधने और सुनिश्चित करने है।
// sync.Mutex का उपयोग करके सुरक्षित आलसी प्रारंभीकरण सिंगलटन पैटर्न का कार्यान्वयन
package singleton
import (
"sync"
)
type Singleton struct {
}
var instance *Singleton
var mu sync.Mutex
func GetInstance() *Singleton {
if instance == nil {
mu.Lock()
defer mu.Unlock()
if instance == nil {
instance = &Singleton{}
}
}
return instance
}