Go Academy · पाठ

sync.Once और sync.Map

एक-बार आरंभीकरण और समवर्ती मैप

पाठ 3, कुल 4 में से13 चरण

sync.Once और sync.Map, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

sync.Once

sync.Once यह सुनिश्चित करता है कि कोई फ़ंक्शन कितनी भी गो-रूटीनों द्वारा समानांतर रूप से कॉल किया जाए, वह ठीक एक बार चले। इसका सामान्य उपयोग सिंगलटन का विलंबित आरंभीकरण है।

Once.Do

Do की केवल पहली कॉल फ़ंक्शन को चलाती है; अलग-अलग गो-रूटीनों से कॉल किए जाने पर भी बाद की कॉलें कोई कार्य नहीं करतीं।

var once sync.Once
var db *Database

func getDB() *Database {
    once.Do(func() { db = openDB() })
    return db
}

Once रीसेट नहीं होता

एक बार sync.Once सक्रिय हो जाने पर उसे रीसेट नहीं किया जा सकता। यदि आपको रीसेट किए जा सकने वाले एक-बारगी निष्पादन की आवश्यकता है, तो स्थिति को किसी परमाणु संचालन या म्यूटेक्स से मैन्युअल रूप से प्रबंधित करें।

Once में पैनिक का व्यवहार

यदि Do को दिया गया फ़ंक्शन पैनिक करता है, तो Do को पूर्ण माना जाता है और भविष्य की कॉलें कोई कार्य नहीं करतीं। पैनिक पहली कॉल करने वाले तक पहुँचता है।

sync.Map का अवलोकन

sync.Map एक समानांतर मानचित्र है, जिसके लिए बाहरी लॉकिंग की आवश्यकता नहीं होती। इसे दो पैटर्न के लिए अनुकूलित किया गया है: (1) एक बार लिखना, कई बार पढ़ना; (2) प्रत्येक गो-रूटीन के लिए अलग-अलग कुंजी-समुच्चय।

sync.Map की विधियाँ

मुख्य विधियाँ: Store, Load, LoadOrStore, Delete, Range। इसमें सामान्य प्रकार के पैरामीटर नहीं होते — कुंजियाँ और मान interface{} होते हैं।

var m sync.Map
m.Store("key", 42)
v, ok := m.Load("key")
if ok { fmt.Println(v.(int)) }

LoadOrStore

LoadOrStore कुंजी मौजूद होने पर मौजूदा मान लौटाता है; अन्यथा नया मान संग्रहीत करके उसे लौटाता है। बूलियन बताता है कि मान लोड किया गया (true) या संग्रहीत किया गया (false)।

actual, loaded := m.LoadOrStore("key", "default")
if loaded { fmt.Println("existing:", actual) }

Range

Range प्रत्येक कुंजी-मान युग्म के लिए फ़ंक्शन कॉल करके सभी युग्मों पर पुनरावृत्ति करता है। पुनरावृत्ति रोकने के लिए false लौटाएँ।

m.Range(func(k, v any) bool {
    fmt.Println(k, v)
    return true // continue
})

sync.Map का उपयोग कब करें

अधिकांश मामलों में Mutex वाले सामान्य मानचित्र को प्राथमिकता दें — यह सरल और अक्सर अधिक तेज़ होता है। sync.Map का उपयोग तब करें जब प्रोफ़ाइलिंग में विवाद दिखाई दे या पहुँच का पैटर्न इसके अनुकूलन लक्ष्यों से मेल खाता हो।

LoadAndDelete

LoadAndDelete मान को परमाणु रूप से लोड करके कुंजी हटाता है और पिछला मान तथा यह जानकारी लौटाता है कि कुंजी मौजूद थी या नहीं।

v, loaded := m.LoadAndDelete("key")
if loaded { fmt.Println("deleted:", v) }

sync.Map सामान्य प्रकार का नहीं है

sync.Map में संग्रहीत मान any होते हैं। अपने कोडबेस में बिखरे हुए प्रकार-आकलनों से बचने के लिए sync.Map को प्रकार-सुरक्षित विधियों वाली प्रकारित संरचना में समाहित करें।

त्वरित जाँच

sync.Once क्या सुनिश्चित करता है?

पुनरावलोकन: sync.Once और sync.Map

मुख्य बिंदु:

  • sync.Once: फ़ंक्शन को ठीक एक बार चलाता है; इसे वापस नहीं बदला जा सकता
  • sync.Map: पढ़ने-प्रधान या अलग-अलग कुंजी वाले पैटर्न के लिए अनुकूलित समानांतर मानचित्र
  • सुरक्षा के लिए sync.Map के चारों ओर प्रकारित आवरणों का उपयोग करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Go सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “sync.Once और sync.Map” पाठ निःशुल्क है?

हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “sync.Once और sync.Map” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“sync.Once और sync.Map” में मैं क्या सीखूँगा?

एक-बार आरंभीकरण और समवर्ती मैप आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“sync.Once और sync.Map” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. sync.Mutex और sync.RWMutex
  2. sync.WaitGroup
  3. sync.Once और sync.Map
  4. रेस डिटेक्टर और सुरक्षित प्रतिरूप
← Go Academy पर वापस जाएँ