What is recover in Go?
recover Go में एक built-in function है जिसका उपयोग panic के बाद program execution को control में लाने के लिए किया जाता है। जब कोई panic होती है, तो program normally crash हो जाता है, लेकिन अगर आप recover function का उपयोग करते हैं, तो आप उस panic से recover कर सकते हैं और program को बिना crash हुए continue रख सकते हैं। recover function केवल उस context में useful होता है जहां से panic raised हुई हो, यानी कि defer की गई functions में।
Basic Usage of recover
recover को आमतौर पर defer के साथ use किया जाता है। जब कोई function panic करता है, तो recover उस panic की value को capture कर लेता है और program को crash होने से रोकता है।
Example: Using recover to Handle Panic
package main
import "fmt"
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
fmt.Println("Start of the program")
// Inducing a panic
panic("A severe error occurred!")
fmt.Println("This line will not be executed")
}
Explanation:
defer func() { ... }():यह deferred functionrecoverको call करता है। अगर कोई panic होती है, तोrecoverउस panic की value को capture करता है।recover():यह function panic से raised value को return करता है। अगर कोई panic हुई हो, तोrecoverउसे handle करता है और program को terminate होने से बचाता है।fmt.Println("Recovered from panic:", r):यह statement panic की value को print करता है और program execution को control में लाने का काम करता है।
How recover Works
recoverfunction सिर्फ उसी function में useful होता है जिसे deferred किया गया हो। अगर आपrecoverको किसी ऐसी function में call करते हैं जिसेdeferनहीं किया गया है, तो यह simplynilreturn करेगा और कोई effect नहीं डालेगा।- अगर panic होती है, तो Go runtime पहले सभी deferred functions को execute करता है। अगर किसी deferred function में
recovercall होती है, तो वो panic से recover कर सकता है और program execution को normal mode में वापस ला सकता है।
Example: Recovering from Panic in a Nested Function
package main
import "fmt"
func main() {
fmt.Println("Start of the main function")
// Calling a function that causes panic
safeDivision(4, 0)
fmt.Println("End of the main function")
}
func safeDivision(a, b int) {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in safeDivision:", r)
}
}()
fmt.Println("Result:", a/b)
}
Explanation:
safeDivision(4, 0):यहां division by zero attempt किया गया है, जो panic trigger करता है।recover():जब panic होती है, तोrecoverfunction इसे capture करता है और इसे handle करता है। इससे program को crash होने से रोका जाता है।fmt.Println("Recovered in safeDivision:", r):यह recovered panic message को print करता है।
When to Use recover
- Graceful Recovery:
recoverका इस्तेमाल तब किया जाता है जब आप चाहते हैं कि program कुछ unexpected situations के बाद भी gracefully recover कर सके। - Library Functions: अगर आप libraries लिख रहे हैं, तो
recoverका इस्तेमाल करके आप अपने users के program को panic के कारण crash होने से बचा सकते हैं। - Critical Cleanup: जब आपको critical resources को release करना हो, जैसे file handles या network connections, तब आप
recoverका इस्तेमाल करके cleanup operations को ensure कर सकते हैं।
When Not to Use recover
- Normal Error Handling:
recoverका इस्तेमाल normal error handling के लिए नहीं करना चाहिए। Normal errors को handle करने के लिए traditional error handling (i.e., returning errors) का इस्तेमाल करना चाहिए। - Overuse:
recoverका overuse नहीं होना चाहिए, क्योंकि इससे debugging और program flow को समझना मुश्किल हो सकता है।
Summary
recover:Go में built-in function है जिसका उपयोग panic से recover करने के लिए किया जाता है।- Usage with defer:
recoverfunction का इस्तेमाल हमेशा deferred functions में किया जाता है ताकि panic होने पर उसे handle किया जा सके। - Graceful Recovery:
recoverprogram को panic से recover करके execution को control में लाने में मदद करता है। - Use Cases: Critical cleanup, library functions में panic handling, और ऐसी situations में जहां program को gracefully recover करना जरूरी हो।
No comments:
Post a Comment