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-তে variable shadowing

🧪 Code Example :

package main

import "fmt"

var a = 10

func main() {
    age := 30

    if age > 18 {
        a := 47        //  শুধু এই if ব্লকের ভিতরে গ্লোবাল `a` কে shadow করে
        fmt.Println(a) // ➜ 47
    }

    fmt.Println(a)     // ➜ 10 (গ্লোবাল `a` প্রিন্ট করে)
}

📌 গুরুত্বপূর্ণ বিষয়:

  • ভেরিয়েবল শ্যাডোয়িং হয় যখন লোকাল ভেরিয়েবলের নাম বাইরের স্কোপের ভেরিয়েবলের নামের সঙ্গে মিলে যায়।
  • Go কোন Error দিবে না এটি শুধুমাত্র বর্তমান স্কোপে থাকা সবচেয়ে ভিতরের ভেরিয়েবলটি ব্যবহার করবে।
  • Global a অপরিবর্তিত থাকে এবং if ব্লকের বাইরে প্রিন্ট হয়।

🧠 Memory ও stack animation

⏱ প্রোগ্রাম শুরু

📦 Data segment:

┌─────────────┐
│ global a=10 │ ◄── প্রোগ্রাম শেষ হওয়া পর্যন্ত থাকে
└─────────────┘

🚀 main() কল হয়

📚 Stack:

┌────────────────────────────┐
│ 🧩 main() stack frame      │
│   └── age = 30             │
└────────────────────────────┘

✅ if ব্লকে প্রবেশ (কারণ age > 18 সত্য)

🧱 নতুন ব্লক স্কোপ শুরু
📚 Stack:

┌────────────────────────────┐
│ 🧩 main() stack frame      │
│   └── age = 30             │
│   🔸 a (shadow করা) = 47   | ◄── global `a` কে shadow করে
└────────────────────────────┘

🖨️ fmt.Println(a) ➜ output: 47 ✅

🔚 if ব্লক শেষ, shadow করা a ডিলিট হয়

📚 Stack:

┌────────────────────────────┐
│ 🧩 main() stack frame      │
│   └── age = 30             │
└────────────────────────────┘

🖨️ fmt.Println(a) ➜ output: 10 ✅ (global a)

🔚 main() শেষ, stack clear

📚 Stack:

(empty)

🧼 প্রোগ্রাম শেষ

📌 ভিজ্যুয়াল সারাংশ

  • গ্লোবাল variable (যেমন a = 10) ডাটা সেগমেন্টে থাকে।
  • লোকাল variable (যেমন age বা shadow করে a) স্ট্যাকে থাকে।
  • নতুন scope (যেমন if, for, function block) এ ঢুকলে নতুন variable স্ট্যাকে পুশ হয়।
  • ব্লক শেষ হলে shadow করা variable স্ট্যাক থেকে মুছে যায়
  • প্রোগ্রাম শেষ হলে স্ট্যাক ক্লিয়ার হয়, কিন্তু ডাটা সেগমেন্ট পুরো সময় জীবিত থাকে।

[Author: @ifrunruhin12 @shahriar-em0n Date: 2025-05-01 Category: interview-qa/class-wise ]