समवर्ती त्रुटि प्रबंधन के लिए errgroup
व्यवहार में golang.org/x/sync/errgroup
समवर्ती त्रुटि प्रबंधन के लिए errgroup, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
गोरूटीन और त्रुटियों की समस्या
go func() के साथ गोरूटीन शुरू करने पर त्रुटियों समेत लौटाए गए मान खो जाते हैं। उन्हें एकत्र करने के लिए अतिरिक्त साधनों (चैनल, WaitGroup) की आवश्यकता होती है। errgroup इसे सरल बनाता है।
golang.org/x/sync/errgroup
errgroup.Group गोरूटीन चलाता है और त्रुटियाँ एकत्र करता है। Wait() सभी गोरूटीन के समाप्त होने तक रुकता है और पहली गैर-nil त्रुटि लौटाता है।
var g errgroup.Group
g.Go(func() error { return fetchUsers() })
g.Go(func() error { return fetchOrders() })
if err := g.Wait(); err != nil {
log.Fatal(err)
}errgroup.WithContext
WithContext एक समूह और उससे प्राप्त संदर्भ लौटाता है। पहली गोरूटीन के त्रुटि लौटाने पर संदर्भ रद्द हो जाता है, जिससे बाकी काम रुक जाता है।
g, ctx := errgroup.WithContext(context.Background())
g.Go(func() error { return doWork(ctx) })
g.Go(func() error { return doOtherWork(ctx) })
err := g.Wait()त्रुटियों के साथ परिणाम एकत्र करना
errgroup केवल त्रुटियाँ एकत्र करता है, परिणाम नहीं। समकालिकता से बचने के लिए पहले से आवंटित स्लाइस में सूचकांक के आधार पर परिणाम रखें:
results := make([]Result, len(items))
for i, item := range items {
i, item := i, item
g.Go(func() error {
r, err := process(ctx, item)
if err != nil { return err }
results[i] = r
return nil
})
}
if err := g.Wait(); err != nil { return err }g.SetLimit (Go 1.20+)
g.SetLimit(n) एक साथ चल रही गोरूटीन की संख्या की अधिकतम सीमा तय करता है — अलग चैनल के बिना ही इनलाइन सेमाफ़ोर की तरह काम करता है।
g.SetLimit(10) // at most 10 goroutines at once
for _, item := range items {
g.Go(func() error { return process(item) })
}g.TryGo
g.TryGo(f) गोरूटीन तभी शुरू करता है जब SetLimit से तय सीमा इसकी अनुमति देती है। शुरू न होने पर false लौटाता है।
केवल पहली त्रुटि लौटाई जाती है
errgroup केवल पहली त्रुटि लौटाता है। यदि आपको सभी त्रुटियाँ चाहिए, तो प्रत्येक गोरूटीन के अंदर म्यूटेक्स-सुरक्षित स्लाइस में उन्हें एकत्र करें।
var mu sync.Mutex
var errs []error
g.Go(func() error {
if err := doWork(); err != nil {
mu.Lock(); errs = append(errs, err); mu.Unlock()
}
return nil
})sync.WaitGroup से अंतर
WaitGroup केवल पूरा होने पर नज़र रखता है; errgroup पूरा होने पर नज़र रखने के साथ-साथ त्रुटियाँ भी एकत्र करता है। जब किसी भी गोरूटीन की विफलता की सूचना देनी हो, तब errgroup को प्राथमिकता दें।
संदर्भ रद्दीकरण का प्रसार
जब errgroup.WithContext का उपयोग किया जाता है, तो प्राप्त संदर्भ का रद्दीकरण संकेत सभी अन्य गोरूटीन को रुकने के लिए कहता है — यह पहली त्रुटि पर रद्द होने के व्यवहार जैसा है।
errgroup कोड का परीक्षण
परीक्षणों में WithTimeout वाला संदर्भ दें, ताकि कोई गोरूटीन अटक जाने पर समूह हमेशा चलता न रहे।
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
g, ctx := errgroup.WithContext(ctx)सेमाफ़ोर का विकल्प
SetLimit से पहले (Go < 1.20), समान प्रभाव प्राप्त करने के लिए अलग-अलग गोरूटीन के भीतर बफ़र किए गए चैनल को सेमाफ़ोर की तरह उपयोग करें।
त्वरित जाँच
errgroup.WithContext ऐसा क्या लौटाता है जो सामान्य errgroup.Group नहीं लौटाता?
पुनरावलोकन: errgroup
मुख्य बिंदु:
- g.Go(func() error) — गोरूटीन शुरू करें और पहली त्रुटि एकत्र करें
- g.Wait() — सभी के समाप्त होने तक रुकता है; पहली त्रुटि लौटाता है
- WithContext — पहली त्रुटि पर संदर्भ रद्द हो जाता है
- g.SetLimit(n) — समवर्ती गोरूटीन की सीमा तय करता है (Go 1.20+)
एआई शिक्षक के साथ Go सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “समवर्ती त्रुटि प्रबंधन के लिए errgroup” पाठ निःशुल्क है?
हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “समवर्ती त्रुटि प्रबंधन के लिए errgroup” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“समवर्ती त्रुटि प्रबंधन के लिए errgroup” में मैं क्या सीखूँगा?
व्यवहार में golang.org/x/sync/errgroup आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“समवर्ती त्रुटि प्रबंधन के लिए errgroup” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Pipeline और Stage प्रतिरूप
- समवर्ती त्रुटि प्रबंधन के लिए errgroup
- सेमाफ़ोर प्रतिरूप
- लीक पहचान और रद्दीकरण