Go में वेरिएबल की वैल्यू के लिए खाली, नल या अनडिफाइंड जैसी कोई अवधारणा नहीं होती। जो वेरिएबल बिना कोई स्पष्ट शुरुआती वैल्यू दिए घोषित किए जाते हैं, उनकी वैल्यू अपने-अपने टाइप की शून्य वैल्यू होती है।
बूलियन, संख्यात्मक टाइप और स्ट्रिंग जैसे प्राथमिक टाइप की शून्य वैल्यू क्रमशः false, 0 और "" होती है।
nil एक आइडेंटिफायर है जिसका अर्थ शून्य होता है, और यह पॉइंटर, फंक्शन, इंटरफेस, स्लाइस, चैनल और मैप जैसे जटिल टाइप की शून्य वैल्यू है।
नीचे दी गई तालिका में Go के टाइप की शून्य वैल्यू बताई गई है।
| टाइप | शून्य वैल्यू |
|---|---|
| बूलियन | false |
| संख्यात्मक | 0 |
| स्ट्रिंग | "" |
| पॉइंटर | nil |
| फंक्शन | nil |
| इंटरफेस | nil |
| स्लाइस | nil |
| चैनल | nil |
| मैप | nil |
आपने देखा होगा कि ऊपर की तालिका में स्ट्रक्ट टाइप नहीं हैं। इसका कारण यह है कि स्ट्रक्ट टाइप की शून्य वैल्यू उसके फील्ड पर निर्भर करती है। जब किसी स्ट्रक्ट के सभी फील्ड अपनी-अपनी शून्य वैल्यू पर सेट हो जाते हैं, तब वह स्ट्रक्ट भी अपनी शून्य वैल्यू पर सेट हो जाता है।
आने वाली जनगणना के लिए शहर का IT सिस्टम तैयार करना आपका काम है। खास तौर पर, जनगणना कर्मियों से मिले डेटा को संभालने वाला प्रोग्राम आपको लिखना है।
जब किसी निवासी की जानकारी दी जाए, तो प्रोग्राम को सिस्टम में नया निवासी बनाना आना चाहिए। इसके अलावा, आप ऐसे फंक्शन बनाएँगे जो यह सुनिश्चित करें कि निवासी के डेटा में आवश्यक जानकारी मौजूद है, और निवासी का डेटा हटा दें। अंत में, सही जनगणना संख्या देने के लिए आप निवासियों की गिनती करेंगे।
जब कोई जनगणना कर्मी किसी निवासी की जानकारी इकट्ठा करता है, तो उसे उस निवासी का नाम, उम्र और पता सिस्टम में दर्ज करना होता है।
NewResident फंक्शन लिखिए जो तीन आर्गुमेंट लेता है:
फंक्शन को एक Resident स्ट्रक्चर का पॉइंटर लौटाना चाहिए, जिसमें यह जानकारी रखी हो।
name := "Matthew Sanabria"
age := 29
address := map[string]string{"street": "Main St."}
NewResident(name, age, address)
// => &{Matthew Sanabria 29 map[street:Main St.]}
कुछ निवासी जनगणना कर्मियों को अपनी निजी जानकारी देने में हिचकिचा सकते हैं। ऐसे मामलों में यह पता करना ज़रूरी होता है कि निवासी ने जनगणना में गिने जाने के लिए आवश्यक जानकारी दी है या नहीं।
जनगणना में गिने जाने के लिए ज़रूरी है कि निवासी अपने नाम के लिए शून्य से अलग कोई वैल्यू दे, और ऐसा पता दे जिसमें street की की वैल्यू भी शून्य न हो। बाकी सारी जानकारी, जैसे निवासी की उम्र, वैकल्पिक है। HasRequiredInfo मेथड लिखिए जो एक बूलियन लौटाता है, जो बताता है कि निवासी ने आवश्यक जानकारी दी है या नहीं।
name := "Matthew Sanabria"
age := 0
address := make(map[string]string)
resident := NewResident(name, age, address)
resident.HasRequiredInfo()
// => false
ज़िंदगी तेज़ी से चलती है और गलतियाँ होती रहती हैं। कोई निवासी शहर छोड़कर जा सकता है। डेटा इकट्ठा करते समय जनगणना कर्मी से गलती हो सकती है। ऐसे मामलों में निवासी का डेटा हटाने की सुविधा होनी चाहिए, ताकि उसकी गिनती न हो।
Delete मेथड लिखिए जो निवासी के सभी फील्ड को उनकी शून्य वैल्यू पर सेट कर देता है।
name := "Matthew Sanabria"
age := 29
address := map[string]string{"street": "Main St."}
resident := NewResident(name, age, address)
fmt.Println(resident)
// Output: &{Matthew Sanabria 29 map[street:Main St.]}
resident.Delete()
fmt.Println(resident)
// Output: &{ 0 map[]}
अब जब सिस्टम जनगणना का डेटा संभाल सकता है, तो जनगणना करने और निवासियों की गिनती करने का समय आ गया है!
Count फंक्शन लिखिए जो एक आर्गुमेंट लेता है:
Resident स्ट्रक्चर के पॉइंटर की एक स्लाइस।फंक्शन को एक पूर्णांक लौटाना चाहिए, जो बताता है कि जनगणना में कितने निवासी गिने गए। किसी निवासी की गिनती तभी हो सकती है जब उसने जनगणना कर्मी को आवश्यक जानकारी दी हो।
name1 := "Matthew Sanabria"
age1 := 29
address1 := map[string]string{"street": "Main St."}
resident1 := NewResident(name1, age1, address1)
name2 := "Rob Pike"
age2 := 0
address2 := make(map[string]string)
resident2 := NewResident(name2, age2, address2)
residents := []*Resident{resident1, resident2}
Count(residents)
// => 1
Exercism पर साइन अप कीजिए और Go को 34 कॉन्सेप्ट166 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।