Go Academy · पाठ

विरासत से बेहतर Composition

Go का डिज़ाइन दर्शन

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

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

Go की अभिकल्पना-दृष्टि

Go जानबूझकर वर्ग इनहेरिटेंस को शामिल नहीं करता। इसका मुहावरेदार तरीका संयोजन है: छोटे प्रकारों और इंटरफ़ेस को मिलाकर व्यवहार बनाना।

इनहेरिटेंस क्यों नहीं

गहरी इनहेरिटेंस शृंखलाएँ नाज़ुक होती हैं: आधार वर्ग में किया गया बदलाव अप्रत्याशित रूप से हर जगह फैल सकता है। संयोजन संबंधों को स्पष्ट और लचीला बनाए रखता है।

प्रकार-संबंध के बजाय स्वामित्व-संबंध

“Manager Employee है” के बजाय, एम्बेडिंग या फ़ील्ड के माध्यम से यह मॉडल कीजिए कि “Manager के पास Employee का डेटा और क्षमताएँ हैं।”

package main

import "fmt"

type Employee struct{ Name string }

func (e Employee) Work() string { return e.Name + " works" }

type Manager struct {
	Employee
	Reports int
}

func main() {
	m := Manager{Employee{"Lin"}, 3}
	fmt.Println(m.Work(), "-", m.Reports, "reports")
}

इंटरफ़ेस के अनुसार प्रोग्राम लिखिए

छोटे इंटरफ़ेस से व्यवहार परिभाषित कीजिए और फिर उन्हें स्वीकार कीजिए। कार्यान्वयन एक-दूसरे की जगह आसानी से इस्तेमाल या परीक्षण-प्रतिरूप से बदले जा सकते हैं।

package main

import "fmt"

type Notifier interface{ Notify(msg string) }

type Email struct{}

func (Email) Notify(msg string) { fmt.Println("email:", msg) }

func alert(n Notifier, m string) { n.Notify(m) }

func main() {
	alert(Email{}, "deploy done")
}

कार्यान्वयन बदलना

क्योंकि फ़ंक्शन किसी इंटरफ़ेस पर निर्भर करता है, इसलिए फ़ंक्शन में बदलाव किए बिना आप कोई भी कार्यान्वयन पास कर सकते हैं।

package main

import "fmt"

type Notifier interface{ Notify(msg string) }

type Email struct{}
type SMS struct{}

func (Email) Notify(m string) { fmt.Println("email:", m) }
func (SMS) Notify(m string)   { fmt.Println("sms:", m) }

func alert(n Notifier, m string) { n.Notify(m) }

func main() {
	alert(Email{}, "hi")
	alert(SMS{}, "hi")
}

व्यवहारों को संयोजित करना

स्वतंत्र और परीक्षण योग्य हिस्सों से सुविधाओं से भरपूर प्रकार बनाने के लिए कई छोटे घटकों को एम्बेड कीजिए।

package main

import "fmt"

type Logger struct{}

func (Logger) Log(s string) { fmt.Println("log:", s) }

type Cache struct{ data map[string]string }

func (c Cache) Get(k string) string { return c.data[k] }

type Service struct {
	Logger
	Cache
}

func main() {
	s := Service{Cache: Cache{data: map[string]string{"k": "v"}}}
	s.Log("started")
	fmt.Println(s.Get("k"))
}

निर्भरता इंजेक्शन

निर्भरताओं को कन्स्ट्रक्टर में हार्ड-कोड करने के बजाय इंटरफ़ेस के रूप में पास कीजिए। यह वायरिंग पर लागू किया गया संयोजन है।

package main

import "fmt"

type Store interface{ Save(s string) }

type MemStore struct{ items []string }

func (m *MemStore) Save(s string) { m.items = append(m.items, s) }

type App struct{ store Store }

func NewApp(s Store) *App { return &App{store: s} }

func main() {
	app := NewApp(&MemStore{})
	app.store.Save("x")
	fmt.Println("saved")
}

छोटे इंटरफ़ेस बेहतर होते हैं

इंटरफ़ेस जितना छोटा होगा, उतने अधिक प्रकार उसे संतुष्ट करेंगे और उसका परीक्षण करना उतना ही आसान होगा। इंटरफ़ेस जितना बड़ा होगा, अमूर्तन उतना ही कमज़ोर होगा।

नाज़ुक बेस वर्ग से बचना

इनहेरिटेंस के बिना ऐसा कोई बेस वर्ग नहीं होता जिसे नुकसान पहुँचाया जा सके। संयोजित प्रत्येक हिस्सा स्वतंत्र रूप से विकसित होता है, जिससे युग्मन कम होता है।

इंटरफ़ेस स्वीकार करें, स्ट्रक्चर लौटाएँ

Go का एक सामान्य दिशानिर्देश है: फ़ंक्शन इंटरफ़ेस स्वीकार करें (लचीले इनपुट) और ठोस स्ट्रक्चर लौटाएँ (स्पष्ट, उपयोगी आउटपुट)।

संयोजन की जाँच-सूची

  • प्रकार-संबंध नहीं, स्वामित्व-संबंध का मॉडल बनाइए
  • छोटे घटकों को एम्बेड कीजिए
  • छोटे इंटरफ़ेस पर निर्भर रहिए
  • निर्भरताएँ इंजेक्ट कीजिए

त्वरित जाँच

संयोजन-दर्शन से जुड़े अपने ज्ञान का परीक्षण कीजिए।

पुनरावलोकन

आपने Go के संयोजन-दर्शन को सीखा।

  • इनहेरिटेंस नहीं; एम्बेडिंग और इंटरफ़ेस से संयोजन कीजिए
  • प्रकार-संबंध के बजाय स्वामित्व-संबंध का मॉडल बनाइए
  • छोटे इंटरफ़ेस के अनुसार प्रोग्राम लिखिए और निर्भरताएँ इंजेक्ट कीजिए
  • इंटरफ़ेस स्वीकार कीजिए और स्ट्रक्चर लौटाइए
शुरुआत निःशुल्क

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

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

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

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

क्या “विरासत से बेहतर Composition” पाठ निःशुल्क है?

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

“विरासत से बेहतर Composition” में मैं क्या सीखूँगा?

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

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

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

“विरासत से बेहतर Composition” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. Struct Embedding
  2. Interface Embedding
  3. Method Promotion
  4. विरासत से बेहतर Composition
← Go Academy पर वापस जाएँ