TGViewer
کداکسپلور | CodeExplore کداکسپلور | CodeExplore @codeexplore · 9.2K subscribers
Post #4010 1.72K
🧵 شی‌گرایی بدون کلاس؟ Go یه راه باحال‌تر داره!

تو خیلی از زبان‌ها مثل Java یا Python، وقتی حرف از شی‌گرایی می‌شه، فوراً می‌ری سراغ کلاس و وراثت. ولی Go می‌گه: «بیخیال کلاس و دردسرهاش، یه راه ساده‌تر و قدرتمندتر داریم» 😎

📌 اینجاست که interface و implementation وارد می‌شن! 🎯

🔧حالا Interface چیه؟

خوب، Interface تو Go یعنی یه مجموعه از متدهایی که یه نوع (type) باید پیاده‌سازی‌شون کنه. بدون این که لازم باشه صریحاً بگی این struct، این interface رو implement می‌کنه!

مثلاً:

type Speaker interface {
Speak() string
}

هر تایپی که متد ()Speak رو داشته باشه، خودش به‌طور خودکار یه Speaker حساب می‌شه! 🤯

🧱حالا Implementation یعنی چی؟

پیاده سازی یا Implementation یعنی یه struct بسازی و متدهایی که interface لازم داره رو روش پیاده کنی.

type Human struct {}

func (h Human) Speak() string {
return "سلام! من انسانم"
}

خب، حالا چون Human متد ()Speak رو داره، خودش‌به‌خود یه Speaker هم هست. لازم نیست هیچ جا بنویسی implements Speaker — Go خودش می‌فهمه! 🔍

💡 چرا این بهتر از کلاس و وراثته؟

✅ ترکیب به‌جای وراثت: تو Go می‌تونی چند تا behavior رو ترکیب کنی، بدون این که مجبور شی از یه کلاس دیگه ارث ببری.

✅ ساده و شفاف: خبری از heirarchy و درخت‌های پیچیده‌ی کلاس نیست.

✅ انعطاف‌پذیر: هر struct می‌تونه چندین interface رو هم‌زمان satisfy کنه.

🛠 استفاده‌ی واقعی
func SaySomething(s Speaker) {
fmt.Println(s.Speak())
}

حالا می‌تونی هر چیزی که متد ()Speak داره، به این تابع بدی:

SaySomething(Human{})

حتی structهای دیگه:
type Robot struct {}

func (r Robot) Speak() string {
return "010010 سلام"
}


SaySomething(Robot{})

🔄 Interface خالی: interface{}

اگه نمی‌دونی طرف چی می‌فرسته، می‌تونی از interface خالی استفاده کنی:

func PrintAnything(v interface{}) {
fmt.Println(v)
}

ولی حواست باشه این قدرت زیاد می‌تونه باعث تاریکی بشه! ☠️

🧪 حالا Dependency Injection با Interface چطوریه؟

یه فایده‌ی خفن دیگه: تست‌نویسی راحت‌تر می‌شه! چون می‌تونی یه Mock بسازی که همون interface رو پیاده کنه. دیگه لازم نیست وابسته به یه struct خاص باشی.

type DB interface {
Save(data string) error
}

تو تست، یه FakeDB می‌سازی و به جای دیتابیس واقعی می‌دی به کدت.

⚠️ نکات مهم

🚫 گو وراثت نداره. به‌جاش composition و interface استفاده کن.

🧩 فقط وقتی interface بساز که واقعاً لازم باشه. زیاد کردن interfaceهای الکی، کد رو پیچیده می‌کنه.

🔄 ساختارها (struct) به‌طور خودکار می‌تونن interfaceها رو satisfy کنن، فقط کافیه متد درست رو داشته باشن.

#golang
☕️Telegram | Website | Discord
  • ❤‍🔥 3
  • 🔥 3
  • ⚡ 2
More from @codeexplore
  1. Oct 8, 2026🙂😂 #fun ☕️ Telegram | Website | Discord
  2. Oct 8, 2026برای اولین بار در تاریخ CVE ها یک عدد 6 رقمی گرفتند! و این عمق فاجعه آسیب پذیری های پیدا ش…
  3. Oct 7, 2026کداکسپلور | CodeExplore pinned a photo
  4. Oct 7, 2026🤖 Routy؛ مدیریت روزت، مستقیم داخل تلگرام تسک‌هات رو بساز، عادت‌هات رو ثبت کن، یادآوری بگی…
  5. Oct 7, 2026Post #4854
  6. Oct 7, 2026‏Graphify یه ابزار اوپن سورسه که باهاش میتونید ببینید بخشای مختلف پروژه چطور به هم وصل…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →