मेरे पास एक ऐसा फ़ंक्शन है जो Card
देता है, जो struct
प्रकार या कोई त्रुटि है।जाने के बाद, संरचना या त्रुटि को वापस करने के लिए बेवकूफ तरीका क्या है?
समस्या यह है कि त्रुटि होने पर मैं फ़ंक्शन से कैसे वापस आ सकता हूं? nil
structs के लिए मान्य नहीं है और मेरे पास मेरे Card
प्रकार के लिए मान्य शून्य मान नहीं है।
func canFail() (card Card, err error) {
// return nil, errors.New("Not yet implemented"); // Fails
return Card{Ace, Spades}, errors.New("not yet implemented"); // Works, but very ugly
}
केवल वैकल्पिक हल मैंने पाया बल्कि एक Card
की तुलना में एक *Card
उपयोग करने के लिए, एक करना है यह या तो nil
जब वहाँ एक त्रुटि है या यह एक वास्तविक Card
बात जब कोई त्रुटि होता है, लेकिन है कि काफी अनाड़ी है।
func canFail() (card *Card, err error) {
return nil, errors.New("not yet implemented");
}
क्या कोई बेहतर तरीका है?
संपादित करें: मुझे एक और तरीका मिला, लेकिन यह नहीं पता कि यह मूर्खतापूर्ण या यहां तक कि अच्छी शैली है।
func canFail() (card Card, err error) {
return card, errors.New("not yet implemented")
}
card
के बाद से एक नामित वापसी मान है, मैं इसे आरंभ करने के बिना उपयोग कर सकते हैं। यह अपने तरीके से शून्य हो गया है, मुझे वास्तव में परवाह नहीं है क्योंकि कॉलिंग फ़ंक्शन को इस मान का उपयोग नहीं करना चाहिए।
के संबंध में थोड़ा अलग है यह एक सूचक को वापस करने के लिए बहुत ही मूर्ख है ताकि आप शून्य का उपयोग कर सकें। यह गलतियों से बचने में मदद करता है और जब आप नामित वापसी मूल्यों का उपयोग नहीं कर रहे हैं तो प्रारंभिक रिटर्न करना आसान होता है। –
हालांकि यह निश्चित रूप से एक सूचक के बजाय शून्य वापस करने में सक्षम होने के लिए आसान है, मैं अकेले उस कारण के लिए पॉइंटर्स का उपयोग नहीं करता। तथ्य यह है कि एक गैर-शून्य त्रुटि लौटाई गई है, यह आपको बताने के लिए पर्याप्त है कि 'कार्ड' में डेटा का उपयोग न करें। आपको मूल्य के बजाय त्रुटि की जांच करनी चाहिए। अन्यथा एक त्रुटि वापस करने में थोड़ा सा बिंदु है ... – weberc2