error Interface এর ব্যবহার

Error Handling in Go (এরর হ্যান্ডলিং) - গো প্রোগ্রামিং (Go Programming) - Computer Programming

305

Go-তে error Interface এর ব্যবহার

Go প্রোগ্রামিং ভাষায়, error একটি বিল্ট-ইন interface, যা error handling সিস্টেমের অংশ। এই error interface দিয়ে, আপনি যে কোনো custom error তৈরি করতে পারেন যা আপনার কোডের মধ্যে নির্দিষ্ট ত্রুটি বা সমস্যাগুলি উপস্থাপন করে। Go তে ত্রুটির (error) ব্যবস্থাপনা সাধারণত error interface এর মাধ্যমে করা হয়, এবং এর সাহায্যে আপনার কোডকে আরও নির্ভুল এবং পরিষ্কারভাবে পরিচালনা করা যায়।


১. Go-তে error Interface কি?

Go-তে error একটি predefined interface, যার মধ্যে শুধুমাত্র একটি method থাকে:

type error interface {
    Error() string
}
  • Error(): এটি একটি method যা একটি string ফেরত দেয় এবং ত্রুটির বার্তা প্রদর্শন করে। এই method কে বাস্তবায়ন করে, আপনি কাস্টম error তৈরি করতে পারেন।

Go তে সাধারণত error interface ব্যবহার করে একটি ত্রুটি অবস্থান যাচাই করা হয় এবং প্রয়োজনে সেই error handling করা হয়।


২. Error Interface ব্যবহার

২.১ Built-in Error Handling

Go তে, error handling সাধারণত দুইটি ভ্যালু দিয়ে করা হয়:

  • প্রথমটি: কোন function বা operation এর সফল ফলাফল।
  • দ্বিতীয়টি: error যদি ঘটে থাকে।
package main

import (
    "fmt"
    "errors"
)

func divide(a, b int) (int, error) {
    if b == 0 {
        // error interface ব্যবহার করে error তৈরি করা
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)  // আউটপুট: Error: division by zero
    } else {
        fmt.Println("Result:", result)
    }
}

এখানে, divide ফাংশনে আমরা একটি error তৈরি করেছি যখন দ্বিতীয় সংখ্যাটি শূন্য (zero) হয়। আমরা errors.New() ব্যবহার করে একটি কাস্টম error বার্তা তৈরি করেছি, যা error interface পূর্ণ করেছে।

আউটপুট:

Error: division by zero

২.২ Error Struct তৈরি করা

Go তে আপনি struct এর মাধ্যমে কাস্টম error তৈরি করতে পারেন এবং সেই struct-এ Error() method দিয়ে error interface বাস্তবায়ন করতে পারেন।

package main

import (
    "fmt"
)

// Custom Error Struct
type DivisionError struct {
    Dividend, Divisor int
}

func (e DivisionError) Error() string {
    return fmt.Sprintf("cannot divide %d by %d", e.Dividend, e.Divisor)
}

func divide(a, b int) (int, error) {
    if b == 0 {
        // কাস্টম error তৈরি করা
        return 0, DivisionError{a, b}
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)  // আউটপুট: Error: cannot divide 10 by 0
    } else {
        fmt.Println("Result:", result)
    }
}

এখানে, আমরা একটি DivisionError নামক struct তৈরি করেছি, যা error interface বাস্তবায়ন করেছে এবং Error() method-টির মাধ্যমে error বার্তা প্রদান করছে।

আউটপুট:

Error: cannot divide 10 by 0

২.৩ Error Wrapping

Go 1.13 থেকে, fmt.Errorf ফাংশনটি error wrapping-এর সুবিধা দেয়, যার মাধ্যমে আপনি একটি existing error-কে নতুন বার্তা দিয়ে wrap করতে পারেন। এই ফিচারটি আপনাকে ত্রুটি সম্পর্কিত আরও বিস্তারিত তথ্য দিতে সহায়তা করে।

package main

import (
    "fmt"
    "errors"
)

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("division failed: %w", errors.New("division by zero"))
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)  // আউটপুট: Error: division failed: division by zero
    } else {
        fmt.Println("Result:", result)
    }
}

এখানে, আমরা fmt.Errorf ব্যবহার করে একটি নতুন error তৈরি করেছি যা পুরানো error-টিকে wrap করে নতুন বার্তা প্রদান করছে।

আউটপুট:

Error: division failed: division by zero

৩. Error Handling Practices

Go তে সাধারণত error handling দুটি অংশে বিভক্ত থাকে:

  1. Error চেকিং: ফাংশন বা অপারেশনে ত্রুটি ঘটে কিনা তা চেক করা।
  2. Error reporting: ত্রুটি ঘটলে তার তথ্য রিপোর্ট বা লগ করা।

এটি সাধারণত এইভাবে করা হয়:

if err != nil {
    // Error handling code here
}

৩.১ Multiple error handling

কখনো কখনো, একাধিক error চেকিং করা প্রয়োজন হতে পারে, যেমন ফাইল ওপেন করা এবং রিডিং, নেটওয়ার্ক কানেকশন তৈরি ইত্যাদি। এখানে multiple error handling এর একটি উদাহরণ:

package main

import (
    "fmt"
    "os"
)

func main() {
    // ফাইল ওপেন করা
    file, err := os.Open("non_existent_file.txt")
    if err != nil {
        fmt.Println("Error opening file:", err)
        return
    }
    defer file.Close()

    // ফাইলের মধ্যে কাজ করতে থাকা কোড...
}

এখানে, আমরা os.Open ফাংশনে একটি error চেক করছি এবং ত্রুটি ঘটলে সেই error রিপোর্ট করছি।


সারসংক্ষেপ

  • error Interface: Go-তে error একটি বিল্ট-ইন interface যা একটি Error() method ধারণ করে, যা ত্রুটির বার্তা প্রদান করে।
  • Custom Errors: Go-তে আপনি struct এর মাধ্যমে কাস্টম error তৈরি করতে পারেন এবং তা Error() method দিয়ে error interface বাস্তবায়ন করতে পারেন।
  • Error Wrapping: fmt.Errorf ব্যবহার করে error wrapping করা সম্ভব, যা existing error এর সাথে নতুন বার্তা যোগ করতে সহায়তা করে।
  • Error Handling: Go তে ত্রুটি চেক এবং রিপোর্ট করার জন্য সাধারণত if err != nil ব্যবহার করা হয়।

Go-তে error interface ব্যবহার করে আপনি শক্তিশালী এবং পরিষ্কার error handling সিস্টেম তৈরি করতে পারবেন, যা আপনার কোডের স্টেবিলিটি এবং নির্ভুলতা বাড়ায়।

Content added By
Promotion

Are you sure to start over?

Loading...