Go Academy · पाठ

जेनेरिक डेटा संरचनाएँ

जेनेरिक Stack और Set बनाना

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

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

जेनरिक डेटा संरचनाएँ क्यों?

जेनरिक से पहले, Go डेवलपर interface{} स्लाइस का उपयोग करते थे, जिससे प्रकार-सुरक्षा समाप्त हो जाती थी, या हर प्रकार के लिए अलग कोड बनाते थे। जेनरिक प्रकार-सुरक्षित और पुनः उपयोग योग्य कंटेनर संभव बनाते हैं।

जेनरिक स्टैक

जेनरिक प्रकार का उपयोग करने वाला प्रकार-सुरक्षित स्टैक:

type Stack[T any] struct{ items []T }
func (s *Stack[T]) Push(v T)        { s.items = append(s.items, v) }
func (s *Stack[T]) Pop() (T, bool)  {
    if len(s.items)==0 { var z T; return z, false }
    n := len(s.items)-1; v := s.items[n]; s.items = s.items[:n]; return v, true
}
func (s *Stack[T]) Len() int { return len(s.items) }

जेनरिक क्यू

स्लाइस पर आधारित FIFO क्यू:

type Queue[T any] struct{ items []T }
func (q *Queue[T]) Enqueue(v T)     { q.items = append(q.items, v) }
func (q *Queue[T]) Dequeue() (T, bool) {
    if len(q.items)==0 { var z T; return z, false }
    v := q.items[0]; q.items = q.items[1:]; return v, true
}

जेनरिक Set

मैप पर आधारित Set — कुंजी का प्रकार comparable होना चाहिए:

type Set[T comparable] struct{ m map[T]struct{} }
func NewSet[T comparable]() *Set[T] { return &Set[T]{m: make(map[T]struct{})} }
func (s *Set[T]) Add(v T)          { s.m[v] = struct{}{} }
func (s *Set[T]) Has(v T) bool     { _, ok := s.m[v]; return ok }
func (s *Set[T]) Delete(v T)       { delete(s.m, v) }

जेनरिक Map सहायक

स्लाइस पर प्रकार-सुरक्षित कार्यात्मक Map:

func Map[T, U any](s []T, f func(T) U) []U {
    out := make([]U, len(s))
    for i, v := range s { out[i] = f(v) }
    return out
}

जेनरिक Filter

ऐसी नई स्लाइस लौटाएँ जिसमें केवल predicate को संतुष्ट करने वाले तत्व हों:

func Filter[T any](s []T, predicate func(T) bool) []T {
    var out []T
    for _, v := range s {
        if predicate(v) { out = append(out, v) }
    }
    return out
}

जेनरिक Reduce

स्लाइस को एकल मान में समेटें:

func Reduce[T, U any](s []T, init U, f func(U, T) U) U {
    acc := init
    for _, v := range s { acc = f(acc, v) }
    return acc
}

OrderedMap

क्रम-संरक्षण करने वाला मैप — स्थिर कुंजी-क्रम के साथ JSON क्रमांकन के लिए उपयोगी:

type OrderedMap[K comparable, V any] struct {
    keys []K
    vals map[K]V
}

जेनरिक संबद्ध सूची

प्रकार-सुरक्षित तत्वों वाली द्वि-संबद्ध सूची:

type Node[T any] struct{ Val T; Next, Prev *Node[T] }
type List[T any] struct{ head, tail *Node[T]; len int }

सीमाएँ

जेनरिक प्रकार T पर प्रकार-स्विच का उपयोग नहीं कर सकते। जेनरिक प्रकारों की विधियाँ नए प्रकार पैरामीटर नहीं जोड़ सकतीं। किसी विशिष्ट T के लिए जेनरिक प्रकार को विशेषीकृत नहीं कर सकते (टेम्पलेट विशेषीकरण नहीं है)।

प्रदर्शन

Go में जेनरिक इंस्टैंशिएशन "GC shapes" के माध्यम से होता है — समान मेमोरी लेआउट वाले प्रकार एक ही कार्यान्वयन साझा करते हैं। इससे कोड का अनावश्यक विस्तार रुकता है और प्रदर्शन ठोस कार्यान्वयनों के करीब बना रहता है।

जेनरिक का उपयोग कब न करें

ऐसे सरल मामलों में जेनरिक से बचें जहाँ कोई इंटरफ़ेस पर्याप्त हो, या जहाँ केवल एक या दो ठोस प्रकार हों — अतिरिक्त जटिलता उसके लाभ से अधिक हो जाती है।

त्वरित जाँच

जेनरिक Set को अपने प्रकार पैरामीटर पर comparable प्रतिबंध की आवश्यकता क्यों होती है?

पुनरावलोकन: जेनरिक डेटा संरचनाएँ

मुख्य बिंदु:

  • Stack, Queue, Set — जेनरिक के साथ प्रकार-सुरक्षित
  • कार्यात्मक सहायक: []T पर Map, Filter, Reduce
  • मैप-आधारित Set के लिए Set[T comparable]
  • विधि-स्तर के प्रकार पैरामीटर नहीं; टेम्पलेट विशेषीकरण नहीं
शुरुआत निःशुल्क

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

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

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

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

क्या “जेनेरिक डेटा संरचनाएँ” पाठ निःशुल्क है?

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

“जेनेरिक डेटा संरचनाएँ” में मैं क्या सीखूँगा?

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

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

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

“जेनेरिक डेटा संरचनाएँ” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. प्रकार पैरामीटर का सिंटैक्स
  2. Constraints: comparable और इंटरफ़ेस
  3. जेनेरिक डेटा संरचनाएँ
  4. व्यवहार में Generics: कमियाँ
← Go Academy पर वापस जाएँ