खोज…


टिप्पणियों

यह लेख डीफर बेसिक्स के ज्ञान को मानता है

साधारण एरर हैंडलिंग के लिए, एरर हैंडलिंग विषय पर पढ़ें

आतंक

एक आतंक सामान्य निष्पादन प्रवाह को रोक देता है और वर्तमान फ़ंक्शन को बाहर कर देता है। स्टैक पर अगले उच्च फ़ंक्शन पर नियंत्रण दिए जाने से पहले किसी भी आस्थगित कॉल को निष्पादित किया जाएगा। प्रत्येक स्टैक का फ़ंक्शन तब तक आस्थगित कॉल से बाहर निकलेगा और चलेगा जब तक कि घबराहट को हटाए गए 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


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow