आम तौर पर आप घबरा के बारे में ज्यादा चिंता करने की जरूरत नहीं है। वे आम तौर पर त्रुटियों के दो वर्गों का प्रतिनिधित्व करते हैं: डेवलपर गलतियों (शून्य संदर्भ, सीमाओं से बाहर सरणी) और सिस्टम स्तर की त्रुटियों के बारे में आप शायद अधिक कुछ नहीं कर सकते (जैसे स्मृति से बाहर चलना)।
जैसा कि अन्य ने कहा socket.Close
घबराएगा, बल्कि यह एक त्रुटि देता है। यदि आप कार्य करें:
defer socket.Close()
त्रुटि खारिज कर दिया है और आप कुछ और करने की जरूरत नहीं है।
लेकिन मान लीजिए कि आप एक आतंक से ठीक होना चाहते हैं। आप कर रहे हैं वसूली हैंडलर तो पहले स्थगित कर रहा है, तो आप कुछ और करने की जरूरत नहीं है:
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
defer panic("this will be recovered")
}
स्थगित कार्यों उलटे क्रम में चलाए जा रहे हैं: http://golang.org/ref/spec#Defer_statements
स्थगित कार्यों आसपास से ठीक पहले क्रियान्वित कर रहे हैं फंक्शन रिटर्न, रिवर्स ऑर्डर में उन्हें स्थगित कर दिया गया था।
सॉकेट। बंद करें() एक आतंक आईआईआरसी का कारण नहीं बन सकता है। – fuz
मुझे पूरी तरह से यकीन नहीं है: बंद करें (उदा। Net.CPConn) के परिणामस्वरूप एक त्रुटि हो सकती है लेकिन मुझे लगता है कि यह घबराहट नहीं करता है। और अगर यह आतंक, उदाहरण के लिए हार्डवेयर भ्रष्टाचार या स्मृति से बाहर आपके ऐप को वैसे भी उड़ा दिया जाता है। आपके मामले के आधार पर आप लौटाई गई त्रुटि को संभालना चाहते हैं, लेकिन बंद में एक आतंक को संभालना थोड़ा सा परावर्तक लगता है। – Volker
@FUZxxl जब मैं क्लाइंट सॉकेट को बंद करने का प्रयास करता हूं जिसे सर्वर से कनेक्ट करने से इंकार कर दिया जाता है, तो यह पैनिक्स है। क्या यह बताने का कोई तरीका है कि बिना किसी घबराहट के बंद करने के लिए सॉकेट सुरक्षित है या नहीं। या मुझे सॉकेट क्लोज लॉजिक के लिए केवल एक और स्तर के डिफर को घोंसला करना है। –