ट्रैक
/
Go
Go
/
सिलेबस
/
स्ट्रक्ट
स्

स्ट्रक्ट में Go

1 अभ्यास

स्ट्रक्ट के बारे में

Go में struct नाम वाले एलिमेंट का एक क्रम होता है, जिन्हें फील्ड कहा जाता है। हर फील्ड का अपना नाम और टाइप होता है। किसी स्ट्रक्ट के अंदर हर फील्ड का नाम अलग-अलग होना चाहिए। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की क्लास से स्ट्रक्ट की तुलना की जा सकती है।

स्ट्रक्ट को परिभाषित करना

आप type और struct कीवर्ड से नया स्ट्रक्ट बनाते हैं और हर फील्ड का नाम और टाइप साफ-साफ लिखते हैं। उदाहरण के लिए, यहाँ हम Shape स्ट्रक्ट बना रहे हैं, जिसमें किसी आकार का नाम और उसका साइज़ रखा जाता है:

type Shape struct {
    name string
    size int
}

स्ट्रक्ट में फील्ड के नाम Go के तरीके से रखे जाते हैं। जिन फील्ड के नाम का पहला अक्षर छोटा होता है, वे सिर्फ उसी पैकेज के कोड को दिखाई देते हैं, जबकि जिनका पहला अक्षर बड़ा होता है, वे दूसरे पैकेज में भी दिखाई देते हैं।

स्ट्रक्ट का इंस्टेंस बनाना

स्ट्रक्ट परिभाषित करने के बाद आपको उसका नया इंस्टेंस बनाना होता है। इंस्टेंस बनाते समय आप फील्ड का नाम लिखकर उन्हें किसी भी क्रम में सेट कर सकते हैं:

s := Shape {
    name: "Square",
    size: 25,
}

इंस्टेंस के फील्ड पढ़ने या बदलने के लिए . का इस्तेमाल कीजिए:

// Update the name and the size
s.name = "Circle"
s.size = 35
fmt.Printf("name: %s size: %d\n", s.name, s.size)
// Output: name: Circle size: 35

जिन फील्ड को कोई शुरुआती वैल्यू नहीं दी जाती, उनकी वैल्यू उनका शून्य वैल्यू बन जाती है। उदाहरण:

s := Shape{name: "Circle"}
fmt.Printf("name: %s size: %d\n", s.name, s.size)
// Output: name: Circle size: 0

अगर आप फील्ड को क्रम से लिखें, तो फील्ड के नाम दिए बिना भी struct का इंस्टेंस बना सकते हैं:

s := Shape {
	"Oval",
	20,
}

लेकिन यह तरीका कमज़ोर कोड माना जाता है, क्योंकि कोई नया फील्ड जुड़ने पर यह टूट सकता है, खास तौर पर तब जब नए फील्ड का टाइप कुछ और हो। अगले उदाहरण में हम Shape में एक और फील्ड जोड़ रहे हैं:

type Shape struct {
	name        string
	description string // new field 'description' added
	size        int
}

s := Shape{
    "Circle",
    20,
}
// Since the second field of the struct is now a string and not an int,
// the compiler will throw an error when compiling the program:
// Output: cannot use 20 (type untyped int) as type string in field value
// Output: too few values in Shape{...}

"New" फंक्शन

कई बार ऐसे फंक्शन रखना अच्छा होता है जो स्ट्रक्ट का इंस्टेंस बनाने में हमारी मदद करें। आम तौर पर इन्हें New कहा जाता है या इनका नाम New से शुरू होता है, लेकिन ये बाकी फंक्शन की तरह ही साधारण फंक्शन हैं, इसलिए आप इन्हें कोई भी नाम दे सकते हैं। ये आपको दूसरी भाषाओं के कंस्ट्रक्टर की याद दिला सकते हैं, पर Go में ये सिर्फ साधारण फंक्शन हैं।

अगले उदाहरण में इन्हीं में से एक New फंक्शन से Shape का नया इंस्टेंस बनाया गया है और आकार के size के लिए अपने-आप एक डिफॉल्ट वैल्यू सेट कर दी गई है:

func NewShape(name string) Shape {
	return Shape{
		name: name,
		size: 100, //default-value for size is 100
	}
}

NewShape("Triangle")
// => Shape { name: "Triangle", size: 100 }

New फंक्शन इस्तेमाल करने के ये फायदे हो सकते हैं:

  • दी गई वैल्यू की जाँच
  • डिफॉल्ट वैल्यू को संभालना
  • चूँकि New फंक्शन अक्सर उन्हीं स्ट्रक्ट के पैकेज में घोषित किए जाते हैं जिन्हें वे बनाते हैं, इसलिए वे स्ट्रक्ट के प्राइवेट फील्ड को भी शुरुआती वैल्यू दे सकते हैं

इस टाइप को और गहराई से समझने के लिए आप ये संसाधन देख सकते हैं: Go by Example: Structs, A Tour of Go: Structs या Structures in Go (structs)

new बिल्ट-इन

स्ट्रक्ट का नया इंस्टेंस बनाने का एक और तरीका new बिल्ट-इन है:

s := new(Shape) // s will be of type *Shape (pointer to shape)
fmt.Printf("name: %s size: %d\n", s.name, s.size)
// Output: name:  size: 0

इस उदाहरण में new स्ट्रक्ट Shape का एक इंस्टेंस बनाता है, जिसमें हर वैल्यू को उसके टाइप की शून्य वैल्यू दी जाती है, और फिर उसका पॉइंटर लौटाता है।

Note

ज़्यादातर मामलों में आप स्ट्रक्ट का नया इंस्टेंस new बिल्ट-इन से बनते हुए नहीं देखेंगे। जब भी मौका मिले, स्ट्रक्ट लिटरल, अपना बनाया New फंक्शन या पैकेज का कोई और फंक्शन इस्तेमाल कीजिए जो स्ट्रक्ट बनाने में आपकी मदद कर सके। स्ट्रक्ट का नया इंस्टेंस बनाने के लिए new बिल्ट-इन सबसे अंतिम उपाय होना चाहिए।

GitHub के ज़रिए संपादित करें यह लिंक नई विंडो या टैब में खुलता है।

स्ट्रक्ट सीखिए