Go (Golang) में रिएक्टिव प्रोग्रामिंग: लाइब्रेरीज़, पैटर्न और उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) में रिएक्टिव प्रोग्रामिंग



रिएक्टिव प्रोग्रामिंग एक प्रतिमान है जो एसिंक्रोनस डेटा स्ट्रीम और परिवर्तनों के प्रसार पर केंद्रित है। Go (Golang) भाषा में, यह अवधारणा अंतर्निहित goroutines और चैनलों के कारण स्वाभाविक रूप से लागू होती है। हालाँकि, जटिल परिदृश्यों के लिए विशेष लाइब्रेरीज़ मौजूद हैं जो रिएक्टिव स्ट्रीम के साथ काम करने के लिए शक्तिशाली उपकरण प्रदान करती हैं।



इस लेख में, हम Go में रिएक्टिव प्रोग्रामिंग के लिए मुख्य लाइब्रेरीज़, उनकी क्षमताओं और उपयोग के उदाहरणों पर विचार करेंगे। यह सामग्री शुरुआती और अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगी जो अपने प्रोजेक्ट्स में रिएक्टिव दृष्टिकोण लागू करना चाहते हैं।



रिएक्टिव प्रोग्रामिंग की मुख्य अवधारणाएँ



उपकरणों पर जाने से पहले, मुख्य शब्दों को समझना महत्वपूर्ण है:



  • Observable — डेटा स्रोत जो ईवेंट उत्पन्न कर सकता है।
  • Observer — सब्सक्राइबर जो ईवेंट पर प्रतिक्रिया करता है।
  • ऑपरेटर — स्ट्रीम को बदलने, फ़िल्टर करने और संयोजित करने के लिए फ़ंक्शन (map, filter, merge, flatMap)।
  • Backpressure — producer और consumer के बीच डेटा ट्रांसफर गति को नियंत्रित करने की तंत्र।


RxGo लाइब्रेरी (Go के लिए रिएक्टिव एक्सटेंशन)



RxGo — Go के लिए रिएक्टिव एक्सटेंशन का सबसे लोकप्रिय कार्यान्वयन है। यह RxJava/RxJS की अवधारणाओं को पोर्ट करता है, उन्हें भाषा की विशेषताओं (goroutines, इनहेरिटेंस की कमी) के अनुकूल बनाता है।



स्थापना:

go get github.com/reactivex/rxgo/v2


उदाहरण: बेसिक Observable

package main

import ( "fmt" "github.com/reactivex/rxgo/v2")

func main() { // सूची से Observable बनाएं observable := rxgo.Just(1, 2, 3, 4, 5)()

// सब्सक्राइब करें और तत्व प्रिंट करें ch := observable.Observe() for item := range ch { fmt.Println(item.V) }}


उदाहरण: ऑपरेटरों के साथ रूपांतरण

package main

import ( "fmt" "github.com/reactivex/rxgo/v2")

func main() { observable := rxgo.Just(1, 2, 3, 4, 5)(). Map(func(item rxgo.Item) rxgo.Item { val := item.V.(int) return rxgo.Of(val * 2) }). Filter(func(item rxgo.Item) bool { return item.V.(int) > 5 })

for item := range observable.Observe() { fmt.Println(item.V) // आउटपुट: 6, 8, 10 }}


go-reactive लाइब्रेरी



go-reactive — RxGo का एक हल्का विकल्प है, जो सरलता और प्रदर्शन पर केंद्रित है। यह रिएक्टिव स्ट्रीम के आधार के रूप में Go चैनलों का उपयोग करता है।



स्थापना:

go get github.com/teivah/go-reactive


उदाहरण: चैनलों के साथ रिएक्टिव स्ट्रीम

package main

import ( "fmt" "github.com/teivah/go-reactive")

func main() { // संख्याओं की स्ट्रीम बनाएं stream := reactive.FromSlice([]int{10, 20, 30, 40, 50})

// ऑपरेटर लागू करें result := stream. Filter(func(i int) bool { return i > 20 }). Map(func(i int) int { return i * 3 })

// परिणाम प्राप्त करें for v := range result.Out() { fmt.Println(v) // आउटपुट: 90, 120, 150 }}


नेटिव चैनलों पर रिएक्टिव प्रोग्रामिंग



Go आपको तृतीय-पक्ष लाइब्रेरीज़ के बिना, goroutines और चैनलों का उपयोग करके रिएक्टिव पैटर्न लागू करने की अनुमति देता है। यह सरल परिदृश्यों के लिए विशेष रूप से उपयोगी है।



उदाहरण: चैनलों पर Observer पैटर्न

package main

import ( "fmt" "time")

type Event struct { Data string}

// Subject — अवलोकनीय वस्तुfunc Subject(out chan<- Event) { for i := 0; i < 5; i++ { out <- Event{Data: fmt.Sprintf("Event #%d", i)} time.Sleep(100 * time.Millisecond) } close(out)}

// Observer — पर्यवेक्षकfunc Ob

अनुशंसाएँ