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
recover
function सिर्फ उसी function में useful होता है जिसे deferred किया गया हो। अगर आपrecover
को किसी ऐसी function में call करते हैं जिसेdefer
नहीं किया गया है, तो यह simplynil
return करेगा और कोई effect नहीं डालेगा।- अगर panic होती है, तो Go runtime पहले सभी deferred functions को execute करता है। अगर किसी deferred function में
recover
call होती है, तो वो 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 होती है, तोrecover
function इसे 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:
recover
function का इस्तेमाल हमेशा deferred functions में किया जाता है ताकि panic होने पर उसे handle किया जा सके। - Graceful Recovery:
recover
program को panic से recover करके execution को control में लाने में मदद करता है। - Use Cases: Critical cleanup, library functions में panic handling, और ऐसी situations में जहां program को gracefully recover करना जरूरी हो।
No comments:
Post a Comment