Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ক্লাস ২৮: Go তে রিসিভার ফাংশন (Receiver Functions)

🔑 মূল ধারণা: : রিসিভার ফাংশন

Go তে, একটি রিসিভার ফাংশন (receiver function) (যাকে method ও বলা হয়) হলো এমন একটি ফাংশন যা কোনো নির্দিষ্ট টাইপ (সাধারণত struct) এর সাথে জুড়ে থাকে। এটা আমাদের ডেটাটাইপের কোনো কাজ বা ব্যবহার যুক্ত করার সুযোগ দেয়, যেমন অন্য প্রোগ্রামিং ভাষায় অবজেক্টের method থাকে।


🧠 রিসিভার ফাংশন কি?

একটা রিসিভার ফাংশন দেখতে সাধারণ ফাংশনের মতোই, কিন্তু func কী-ওয়ার্ড এবং ফাংশনের নামের মাঝে একটা বিশেষ receiver parameter থাকে।

func (r ReceiverType) FunctionName(params) returnType {
    // function body
}

রিসিভার টাইপটি হতে পারে:

  • একটি ভ্যালু রিসিভার (value receiver): (t Type) → একটি কপি রিসিভ করে
  • একটি পয়েন্টার রিসিভার (pointer receiver): (t *Type) → একটি রেফারেন্স রিসিভ করে (অরিজিনাল ডেটা পরিবর্তন করতে পারে)

🏗️ প্রোজেক্টের কোড থেকে দেখতে পাই

func (todos *Todos) add(title string) {
    todo := Todo{
        Title: title,
        Completed: false,
        CompletedAt: nil,
        CreatedAt: time.Now(),
    }
    *todos = append(*todos, todo)
}

হলো রিসিভার এই মেথড টি এর সাথে এটাচড

  • todos *Todos হলো রিসিভার
  • এই method টি Todos এর সাথে যুক্ত ([]Todo: একটি কাস্টম টাইপ)
  • *Todos পয়েন্টারটি অরিজিনাল স্লাইসকে পরিবর্তন করতে দেয়

main.go এ ব্যবহারের উদাহরণ:

todos.add("Buy milk")

🔁 রিসিভার ফাংশন কেন ব্যবহার করব?

  • ডেটার সাথে সম্পর্কিত লজিক গুছিয়ে রাখা ✅
  • Go-তে OOP-এর মতো আচরণ পাওয়া ✅
  • কোডকে আরও পরিষ্কার ও মডুলার রাখা ✅

💡 আরও সহজ উদাহরণ

type User struct {
    Name string
}

// Value receiver (no change to original)
func (u User) SayHi() {
    fmt.Println("Hi, I am", u.Name)
}

// Pointer receiver (can change original)
func (u *User) ChangeName(newName string) {
    u.Name = newName
}

func main() {
    user := User{Name: "Ruhin"}
    user.SayHi() // Hi, I am Ruhin
    user.ChangeName("Mukim")
    user.SayHi() // Hi, I am Mukim
}

⚙️ ⚙️ সারাংশ

টার্মঅর্থ
Receiverযে টাইপের সাথে মেথড যুক্ত থাকে (যেমন, *Todos)
Value Receiverডেটার কপি পায়; আসল ডেটা পরিবর্তন করতে পারে না
Pointer Receiverডেটার রেফারেন্স পায়; আসল ডেটা পরিবর্তন করতে পারে

📘 ভিজ্যুয়ালাইজেশন

todos.add()কে অবজেক্টের কোনো কাজ বা আচরণ কল করার মতো ভাবা যেতে পারে:

object.method()

এই প্যাটার্নটি Todos কে কাস্টম লজিক যোগ করার সুযোগ দেয়, যেমন add, delete, toggle, print ইত্যাদি, ঠিক Python বা Java-এর ক্লাস মেথডের মতো।


[Author: @ifrunruhin12, @nazma98 Date: 2025-05-01 - 2025-05-17 Category: interview-qa/class-wise ]