बहु-मूल्य वापसी फ़ंक्शन के मामले में आप फ़ंक्शन को कॉल करते समय परिणाम के विशिष्ट मूल्य के फ़ील्ड या विधियों का उल्लेख नहीं कर सकते।
और अगर उनमें से एक एक है error
, तो यह एक कारण के लिए है (जो फ़ंक्शन विफल हो सकता है) और आपको इसे बाईपास नहीं करना चाहिए क्योंकि यदि आप करते हैं, तो आपका बाद का कोड भी बुरी तरह से विफल हो सकता है (उदाहरण के लिए रनटाइम आतंक)।
हालाँकि ऐसी परिस्थितियाँ हो सकती हैं जहाँ आप जानते हैं कि कोड किसी भी परिस्थिति में विफल नहीं होगा। इन मामलों में आप एक सहायक फ़ंक्शन (या विधि) प्रदान कर सकते हैं जो कि त्याग देगा error
(या यदि यह अभी भी होता है तो रनटाइम आतंक बढ़ा सकता है)।
यह मामला हो सकता है यदि आप कोड से किसी फ़ंक्शन के लिए इनपुट मान प्रदान करते हैं, और आप जानते हैं कि वे काम करते हैं।
इसके महान उदाहरण हैं पैकेज template
और regexp
: यदि आप एक मान्य टेम्पलेट या संकलन समय पर प्रदान करते हैं, तो आप सुनिश्चित कर सकते हैं कि उन्हें हमेशा रनटाइम पर त्रुटियों के बिना पार्स किया जा सकता है। इस कारण से template
पैकेज Must(t *Template, err error) *Template
फ़ंक्शन प्रदान करता है और regexp
पैकेज MustCompile(str string) *Regexp
फ़ंक्शन प्रदान करता है : वे वापस नहीं आते हैंerror
s क्योंकि उनका इच्छित उपयोग वह जगह है जहाँ इनपुट वैध होने की गारंटी है।
उदाहरण:
// "text" is a valid template, parsing it will not fail
var t = template.Must(template.New("name").Parse("text"))
// `^[a-z]+\[[0-9]+\]$` is a valid regexp, always compiles
var validID = regexp.MustCompile(`^[a-z]+\[[0-9]+\]$`)
अपने मामले पर वापस
यदि आप निश्चित Get()
हो सकते हैं तो error
कुछ इनपुट मानों के लिए उत्पादन नहीं होगा , आप एक सहायक Must()
फ़ंक्शन बना सकते हैं जो वापस नहीं लौटेगा, error
लेकिन अगर यह अभी भी होता है, तो एक रनटाइम आतंक बढ़ाएँ:
func Must(i Item, err error) Item {
if err != nil {
panic(err)
}
return i
}
लेकिन आपको सभी मामलों में इसका उपयोग नहीं करना चाहिए, बस जब आप सुनिश्चित करें कि यह सफल हो जाए। उपयोग:
val := Must(Get(1)).Value
वैकल्पिक / सरलीकरण
आप इसे और भी सरल कर सकते हैं यदि आप Get()
कॉल को अपने सहायक फ़ंक्शन में शामिल करते हैं, तो इसे कॉल करें MustGet
:
func MustGet(value int) Item {
i, err := Get(value)
if err != nil {
panic(err)
}
return i
}
उपयोग:
val := MustGet(1).Value
देखें कुछ रोचक / संबंधित प्रश्न:
कैसे golang में कई रिटर्न पार्स करने के लिए
सामान्य कार्यों पर गोलंग में 'ओके' की तरह वापसी
item
आम तौर परnil
एक त्रुटि के मामले में होगा । पहले एक त्रुटि की जाँच किए बिना, आपका कोड उस स्थिति में क्रैश हो जाएगा।