Go
दहशत और उबर
खोज…
टिप्पणियों
यह लेख डीफर बेसिक्स के ज्ञान को मानता है
साधारण एरर हैंडलिंग के लिए, एरर हैंडलिंग विषय पर पढ़ें
आतंक
एक आतंक सामान्य निष्पादन प्रवाह को रोक देता है और वर्तमान फ़ंक्शन को बाहर कर देता है। स्टैक पर अगले उच्च फ़ंक्शन पर नियंत्रण दिए जाने से पहले किसी भी आस्थगित कॉल को निष्पादित किया जाएगा। प्रत्येक स्टैक का फ़ंक्शन तब तक आस्थगित कॉल से बाहर निकलेगा और चलेगा जब तक कि घबराहट को हटाए गए recover()
का उपयोग करके नियंत्रित नहीं किया जाता है, या जब तक कि आतंक main()
तक नहीं पहुंचता main()
और कार्यक्रम समाप्त हो जाता है। यदि ऐसा होता है, तो घबराहट और स्टैक ट्रेस करने के लिए प्रदान किए गए तर्क को stderr
प्रिंट किया जाएगा।
package main
import "fmt"
func foo() {
defer fmt.Println("Exiting foo")
panic("bar")
}
func main() {
defer fmt.Println("Exiting main")
foo()
}
आउटपुट:
Exiting foo
Exiting main
panic: bar
goroutine 1 [running]:
panic(0x128360, 0x1040a130)
/usr/local/go/src/runtime/panic.go:481 +0x700
main.foo()
/tmp/sandbox550159908/main.go:7 +0x160
main.main()
/tmp/sandbox550159908/main.go:12 +0x120
यह ध्यान रखना महत्वपूर्ण है कि panic
किसी भी प्रकार को इसके पैरामीटर के रूप में स्वीकार करेगा।
वसूली
जैसा कि नाम से पता चलता है, पुनर्प्राप्त करें एक panic
से उबरने का प्रयास कर सकते हैं। इस वसूली को स्थगित बयान में लेने की कोशिश की जानी चाहिए क्योंकि सामान्य निष्पादन प्रवाह रोक दिया गया है। recover
किए recover
कथन को सीधे आस्थगित फ़ंक्शन संलग्नक के भीतर दिखाई देना चाहिए। आस्थगित फ़ंक्शन कॉल द्वारा किए गए कार्यों में पुनर्प्राप्त बयानों को सम्मानित नहीं किया जाएगा। recover()
कॉल प्रारंभिक घबराहट के लिए प्रदान किए गए तर्क को वापस कर देगा, अगर कार्यक्रम वर्तमान में घबरा रहा है। यदि कार्यक्रम वर्तमान में नहीं है, तो recover()
nil
वापस आ जाएगी।
package main
import "fmt"
func foo() {
panic("bar")
}
func bar() {
defer func() {
if msg := recover(); msg != nil {
fmt.Printf("Recovered with message %s\n", msg)
}
}()
foo()
fmt.Println("Never gets executed")
}
func main() {
fmt.Println("Entering main")
bar()
fmt.Println("Exiting main the normal way")
}
आउटपुट:
Entering main
Recovered with message bar
Exiting main the normal way