Defer , Panic , Recover
🔹 1. defer কী? (সহজ ভাষায়)
defer মানে হলো —
👉 এই কাজটা ফাংশন শেষ হওয়ার ঠিক আগে করো
যখনই defer লেখা হয়, Go সেটা মনে রাখে
আর ফাংশন return করার আগে সেটা execute করে।
🔁 মনে রাখার ট্রিক
defer = “শেষে করবো”
🔹 2. defer এর সবচেয়ে সহজ উদাহরণ
package main
import "fmt"
func main() {
defer fmt.Println("World")
fmt.Println("Hello")
}
🧠 Output হবে:
Hello
World
কেন?
fmt.Println("World")defer করা হয়েছেতাই
main()শেষ হওয়ার সময় এটা চালানো হয়েছে
🔹 3. একাধিক defer হলে কী হয়? (LIFO)
Go তে defer কাজ করে Stack এর মতো
👉 Last In, First Out (LIFO)
উদাহরণ:
package main
import "fmt"
func main() {
defer fmt.Println("1")
defer fmt.Println("2")
defer fmt.Println("3")
}
🧠 Output:
3
2
1
👉 কারণ: শেষ defer আগে execute হয়
🔹 4. defer কেন দরকার?
বাস্তবে defer ব্যবহার হয়:
file বন্ধ করার জন্য
database connection close করতে
mutex unlock করতে
panic হলেও clean-up নিশ্চিত করতে
বাস্তব উদাহরণ (File close):
file, err := os.Open("test.txt")
if err != nil {
return
}
defer file.Close()
👉 যেখানেই function শেষ হোক না কেন,
file অবশ্যই close হবে
🔥 এখন আসি panic আর recover
🔹 5. panic কী?
panic মানে —
👉 প্রোগ্রাম ভেঙে পড়ছে!
যখন panic হয়:
normal execution বন্ধ হয়ে যায়
program crash করে
তবে তার আগে
deferগুলো execute হয়
উদাহরণ:
package main
func main() {
panic("Something went wrong!")
}
🔹 6. recover কী?
recover দিয়ে আমরা panic থেকে program কে বাঁচাতে পারি
⚠️ কিন্তু:
recoverশুধু defer এর ভিতরে কাজ করে
🔹 7. panic + defer + recover একসাথে
সম্পূর্ণ example:
package main
import "fmt"
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
fmt.Println("Start")
panic("Something bad happened")
fmt.Println("End") // এই লাইন execute হবে না
}
🧠 Output:
Start
Recovered from panic: Something bad happened
ব্যাখ্যা:
panicহলে program ভাঙার পথে যায়কিন্তু তার আগে
deferexecute হয়recover()panic ধরে ফেলেprogram crash না করে gracefully শেষ হয়
🔹 8. বাস্তবে recover কোথায় ব্যবহার হয়?
Web server (Express / Gin / Fiber)
Middleware level error handling
Critical system crash আটকাতে
উদাহরণ (Backend চিন্তা করে):
func safeFunction() {
defer func() {
if err := recover(); err != nil {
fmt.Println("Error handled:", err)
}
}()
// risky code
}
🔹 9. মনে রাখার শর্ট নোট 🧠
| Keyword | কাজ |
|---|---|
| defer | function শেষ হওয়ার আগে execute |
| panic | program crash |
| recover | panic থেকে বাঁচায় |
| recover কাজ করে | শুধু defer এর ভিতরে |
🔥 Beginner Tip (খুব গুরুত্বপূর্ণ)
❌ সব জায়গায় panic/recover ব্যবহার কোরো না
✅ Normal error এর জন্য error return করোpanic/recover শুধু unexpected critical error এর জন্য