Go के लिए mo लाइब्रेरी: मोनाड और फंक्शनल पैटर्न
Go में फंक्शनल प्रोग्रामिंग की दुनिया में आपका स्वागत है! mo लाइब्रेरी ( monads से) एक शक्तिशाली टूल है जो इम्पेरेटिव Go भाषा में Haskell, Scala और Rust जैसी भाषाओं के मोनाड और फंक्शनल पैटर्न लाती है। अगर आपने कभी if err != nil के ज़रिए एरर हैंडलिंग, nil की अंतहीन जाँच या लंबी कॉल चेन की समस्या का सामना किया है, तो mo एक सुंदर समाधान प्रदान करती है।
इस लाइब्रेरी का मुख्य उद्देश्य टाइप-सेफ कंटेनर (Option, Result, Either) प्रदान करना है, जो संभावित स्थितियों (मान का होना/न होना, सफलता/त्रुटि) को समाहित करते हैं और आपको फंक्शनल स्टाइल में उनके साथ काम करने देते हैं। दर्जनों कंडीशनल स्टेटमेंट लिखने के बजाय, आप ट्रांसफॉर्मेशन की चेन बनाते हैं, जहाँ हर कदम अपने आप संभाला जाता है। यह कोड को अधिक पढ़ने योग्य, अनुमानित और त्रुटियों से मुक्त बनाता है, खासकर जटिल बिज़नेस लॉजिक में।
mo लाइब्रेरी Go को Haskell में बदलने की कोशिश नहीं करती। यह एक व्यावहारिक दृष्टिकोण प्रदान करती है: आप फंक्शनल पैटर्न का उपयोग वहाँ करते हैं जहाँ यह वास्तव में कोड को सरल बनाता है, और Go के परिचित सिंटैक्स को बनाए रखता है। mo एरर हैंडलिंग, ऑप्शनल वैल्यू के साथ काम करने, फंक्शन कम्पोज़िशन और डेटा प्रोसेसिंग पाइपलाइनों को लागू करने के लिए विशेष रूप से उपयोगी है। यह गोरूटीन और चैनल के साथ अच्छी तरह से काम करती है, जिससे आप विश्वसनीय कंकरेंट प्रोग्राम बना सकते हैं।
इंस्टॉलेशन
mo लाइब्रेरी को इंस्टॉल करना Go के मानक तरीके से go get पैकेज मैनेजर के ज़रिए होता है। अपने प्रोजेक्ट की रूट डायरेक्टरी (जहाँ go.mod फ़ाइल है) में टर्मिनल में निम्नलिखित कमांड चलाएँ:
go get github.com/samber/mo
इस कमांड को चलाने के बाद, लाइब्रेरी आपकी go.mod फ़ाइल में जुड़ जाएगी, और आप इसे अपने सोर्स फ़ाइलों में इम्पोर्ट कर सकते हैं। सुनिश्चित करें कि आपके पास Go का वर्शन 1.18 या उससे ऊपर है (जेनेरिक्स के सपोर्ट के लिए आवश्यक)।
त्वरित शुरुआत
चलिए एक क्लासिक उदाहरण से शुरू करते हैं — दो संख्याओं का सुरक्षित विभाजन। पारंपरिक Go में हम एक एरर लौटाते। mo के साथ हम Result टाइप का उपयोग करते हैं, जो या तो Ok (सफलता) या Err (त्रुटि) हो सकता है।
package main
import (
"fmt"
"github.com/samber/mo"
)
// safeDivide एक Result लौटाता है जिसमें या तो भाग का परिणाम या त्रुटि होती है।
func safeDivide(a, b float64) mo.Result[float64] {
if b == 0 {
return mo.Err[float64](fmt.Errorf("शून्य से भाग"))
}
return mo.Ok(a / b)
}
func main() {
result := safeDivide(10, 2)
// दोनों स्थितियों को संभालने के लिए Match मेथड का उपयोग करें।
result.Match(
func(value float64) {
fmt.Printf("परिणाम: %.2f\n", value)
},
func(err error) {
fmt.Printf("त्रुटि: %s\n", err)
},
)
// शून्य से भाग देखें।
result2 := safeDivide(10, 0)
result2.Match(
func(value float64) {
fmt.Printf("परिणाम: %.2f\n", value)
},
func(err error) {
fmt.Printf("त्रुटि: %s\n", err)
},
)
}
यह उदाहरण मूल विचार को दर्शाता है: मैन्युअल रूप से एरर चेक करने के बजाय, हम Match मेथड का उपयोग करके हैंडलिंग की ज़िम्मेदारी लाइब्रेरी को सौंप देते हैं।
मुख्य तरीके और फंक्शन
नीचे mo लाइब्रेरी के प्रमुख घटक दिए गए हैं। हम 8 मुख्य तरीकों/टाइप्स को देखेंगे जो आपकी 90% ज़रूरतों को पूरा करेंगे।
1. mo.Ok[T any] और mo.Err[T any]
सिग्नेचर:
func Ok[T any](value T) Result[T]func Err[T any](err error) Result[T]
यह क्या करता है: ये फंक्शन एक Result टाइप बनाते हैं। Ok एक सफल परिणाम को दर्शाता है जिसमें एक मान होता है, और Err एक त्रुटि को दर्शाता है।
पुस्तकालय में भी
Kotlin में PDF जनरेशन: लाइब्रेरीज़ और टूल्स (iText, Apache PDFBox)
NestJS JavaScript (Node.js) पूर्ण गाइड: उदाहरण सहित
TypeScript अनुप्रयोगों की निगरानी: लाइब्रेरी, उपकरण और कॉन्फ़िगरेशन
Event Bus और Observer पैटर्न Swift में: कार्यान्वयन और उदाहरण