Error Handling এর জন্য defer, panic, এবং recover

Control Flow Statements (নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস) - গো প্রোগ্রামিং (Go Programming) - Computer Programming

321

Error Handling in Go: defer, panic, and recover

Go প্রোগ্রামিং ভাষায় এরর হ্যান্ডলিং একটি গুরুত্বপূর্ণ বিষয়, এবং Go-তে এর জন্য তিনটি বিশেষ ফিচার রয়েছে: defer, panic, এবং recover। এই তিনটি ফিচার ব্যবহার করে, আপনি সঠিকভাবে এরর ম্যানেজমেন্ট করতে পারেন এবং প্রোগ্রাম চালানোর সময় সম্ভাব্য সমস্যা মোকাবিলা করতে পারেন। চলুন, এগুলোর বিস্তারিত আলোচনা করা যাক।


১. defer (ডিফার)

defer হল একটি কিওয়ার্ড যা ফাংশনের শেষে একটি ফাংশন কল চালানোর জন্য ব্যবহৃত হয়। যখন কোনো ফাংশন শেষ হয়, তখন defer দ্বারা কল করা ফাংশনটি সঞ্চালিত হয়, তা যতই আগেই ডিফাইন করা হোক না কেন।

defer সাধারণত রিসোর্স ক্লিনআপ, যেমন ফাইল বা নেটওয়ার্ক কানেকশন বন্ধ করার জন্য ব্যবহৃত হয়।

১.১ defer উদাহরণ

package main

import "fmt"

func main() {
    fmt.Println("Starting the program...")

    // defer ব্যবহার করা
    defer fmt.Println("Cleaning up...")

    fmt.Println("Executing main tasks...")
}

এখানে, defer fmt.Println("Cleaning up...") ফাংশন কলটি main ফাংশনের শেষে চালানো হবে। আউটপুট হবে:

Starting the program...
Executing main tasks...
Cleaning up...

defer ফাংশনটি কেবলমাত্র তার উপস্থিতি হওয়া পর্যন্ত বিলম্বিত থাকে এবং প্রোগ্রাম শেষে তার কার্যকর হবে।

১.২ defer ব্যবহার করার সাধারণ ক্ষেত্র

  • ফাইল ক্লোজ করা
  • ডাটাবেস কানেকশন বন্ধ করা
  • লক আনলক করা

২. panic (প্যানিক)

panic হল একটি কিওয়ার্ড যা একটি রUNTIME এরর বা অপ্রত্যাশিত পরিস্থিতি নির্দেশ করতে ব্যবহৃত হয়। যখন panic ঘটে, তা সাধারণত প্রোগ্রামটি বন্ধ করে দেয়। এটি সাধারণত তখন ব্যবহার করা হয় যখন কোনো ফাংশন এমন একটি ত্রুটি বা পরিস্থিতির সম্মুখীন হয়, যা প্রোগ্রাম চালানোর জন্য অগ্রহণযোগ্য।

২.১ panic উদাহরণ

package main

import "fmt"

func main() {
    fmt.Println("Starting the program...")

    // panic ঘটানো
    panic("Something went wrong!")

    fmt.Println("This line will never be executed.")
}

এখানে, panic("Something went wrong!") কলটি প্রোগ্রামটিকে থামিয়ে দেবে এবং এর পরবর্তী লাইনটি আর এক্সিকিউট হবে না। আউটপুট হবে:

Starting the program...
panic: Something went wrong!

goroutine 1 [running]:
main.main()
    /path/to/your/file.go:7 +0x60

panic সাধারণত ফাইল বা ডাটাবেস সংযোগের ত্রুটি, ইনভ্যালিড ইনপুট, বা অন্য কোনো ক্রিটিক্যাল ত্রুটি সনাক্ত করতে ব্যবহার করা হয়।


৩. recover (রিকভার)

recover একটি ফাংশন যা সাধারণত defer এর সাথে ব্যবহার করা হয়, যাতে panic এর পরে প্রোগ্রামকে পুনরুদ্ধার করা যায় এবং প্রোগ্রামটি বন্ধ না হয়। এটি মূলত একটি রক্ষা ব্যবস্থা হিসেবে কাজ করে যা panic ঘটলে প্রোগ্রামকে বন্ধ হতে বাধা দেয় এবং তাকে স্বাভাবিক অবস্থায় ফিরিয়ে আনে।

৩.১ recover উদাহরণ

package main

import "fmt"

func riskyFunction() {
    // defer এর মধ্যে recover ব্যবহার করা
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered from:", r)
        }
    }()

    panic("Something went wrong!")
}

func main() {
    fmt.Println("Starting the program...")

    riskyFunction()  // এটি panic ঘটাবে

    fmt.Println("Program is still running...")
}

এখানে, riskyFunction ফাংশনটি panic ঘটানোর পর, defer ব্লকের মধ্যে থাকা recover() ফাংশনটি panic থেকে প্রোগ্রামকে রক্ষা করবে এবং panic এর বার্তা প্রিন্ট করবে।

আউটপুট:

Starting the program...
Recovered from: Something went wrong!
Program is still running...

৩.২ recover এবং defer এর ব্যবহার

recover সাধারণত defer এর সাথে ব্যবহৃত হয়, কারণ defer কোনো ফাংশনের শেষ মুহূর্তে কার্যকর হয়, যখন panic ঘটানো হয়। এটি নিরাপদভাবে panic এর পরে প্রোগ্রাম চালু রাখে এবং প্রোগ্রামের অবস্থা সংরক্ষণ করতে সাহায্য করে।


defer, panic, recover এর সমন্বয় উদাহরণ

package main

import "fmt"

func functionThatMayPanic() {
    // defer ব্লক দিয়ে recover ব্যবহার
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in functionThatMayPanic:", r)
        }
    }()

    // panic ঘটানো
    panic("Something bad happened!")
}

func main() {
    fmt.Println("Program started...")

    functionThatMayPanic()  // এখানে panic হবে

    fmt.Println("Program continues after recover...")
}

আউটপুট:

Program started...
Recovered in functionThatMayPanic: Something bad happened!
Program continues after recover...

সারসংক্ষেপ

  • defer: এটি একটি ফাংশন কলের জন্য দেরি করে কাজ করার ব্যবস্থা। এটি সাধারণত রিসোর্স ক্লিনআপ এবং আনলকিংয়ের জন্য ব্যবহৃত হয়।
  • panic: এটি প্রোগ্রামের মধ্যে একটি গুরুতর ত্রুটি সনাক্ত করলে প্রোগ্রাম বন্ধ করতে ব্যবহৃত হয়। এটি সাধারণত অবাঞ্ছিত বা অপ্রত্যাশিত অবস্থায় ব্যবহৃত হয়।
  • recover: এটি panic থেকে প্রোগ্রামকে রক্ষা করার জন্য ব্যবহৃত হয় এবং প্রোগ্রাম চালু রাখে। এটি সাধারণত defer ব্লকের সাথে ব্যবহৃত হয়।

এই তিনটি ফিচার মিলে Go তে শক্তিশালী এরর হ্যান্ডলিং মেকানিজম তৈরি করে, যা প্রোগ্রামের অবস্থা নিয়ন্ত্রণ এবং তার কার্যকারিতা বজায় রাখতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...