TGViewer
کداکسپلور | CodeExplore کداکسپلور | CodeExplore @codeexplore · 9.2K subscribers
Post #3987 1.37K
🧵 کانال‌ها و گوروتین‌ها در Go
اگه بخوای چند تا کارو هم‌زمان تو Go انجام بدی، دو تا ابزار جادویی داری: goroutine و channel. اینا کمک می‌کنن کدت سریع‌تر، سبک‌تر و هوشمندتر بشه 😎

🚀 گوروتین چیه؟
گوروتین (goroutine) یه نخ سبکه که Go خودش مدیریت می‌کنه. کافیه قبل از یه تابع go بذاری تا هم‌زمان با بقیه‌ی برنامه اجرا بشه:

go sayHello()

🧠 یعنی چی؟
یعنی اون تابع اجرا می‌شه ولی برنامه منتظر نمی‌مونه که تموم شه. اینجوری کلی کارو باهم می‌تونی انجام بدی!

📡 کانال چیه؟
کانال (channel) یه راه ارتباطیه بین گوروتین‌ها. باهاش می‌تونی داده بفرستی و بگیری، بدون این که نگرانی race condition داشته باشی 💬

مثلاً:

ch := make(chan string)

go func() {
ch <- "سلام از گوروتین"
}()

msg := <-ch
fmt.Println(msg)

📤 اینجا یه گوروتین پیام می‌فرسته، و گوروتین اصلی می‌گیره.

✨ کاربردهای خفن کانال و گوروتین
✅ اجرای هم‌زمان چند عملیات
✅ سینک‌کردن دیتا بین توابع
✅ ساخت برنامه‌های سریع، تمیز و بدون بن‌بست
✅ حذف نیاز به lock تو خیلی از موارد

🔀 کانال یک‌طرفه
بعضی وقتا دوست داری فقط ارسال یا فقط دریافت داشته باشی. اون موقع می‌تونی کانال یک‌طرفه بسازی:

func sendData(ch chan<- int) {
ch <- 42
}

func receiveData(ch <-chan int) {
fmt.Println(<-ch)
}

🔒 این‌جوری Go تضمین می‌کنه که اشتباهی با کانال برخورد نکنی.

📦 کانال‌های بافر‌دار
به‌صورت پیش‌فرض، کانال‌ها بی‌واسطه‌ هستن (بدون بافر). ولی می‌تونی با make(chan T, n) یه کانال با ظرفیت n بسازی:

ch := make(chan int, 2)
ch <- 1
ch <- 2

⏸️ اینجوری تا زمانی که ظرفیت پر نشده، ارسال‌کننده بلاک نمی‌شه.

⚠️ نکات مهم
🚧 یادت نره کانالی که دیگه لازم نداری رو ببندی: close(ch)
☠️ اگه یه کانال ساخته باشی ولی کسی ازش دریافت نکنه یا نفرست، برنامه قفل می‌کنه (deadlock)
🐘 ساختن بی‌رویه‌ی goroutine ممکنه حافظه رو بخوره، حواست باشه!

🧹 جمع‌بندی آخر
کانال و گوروتین مثل جاروبرقی و سیم‌برق‌ان تو Go باهم کار می‌کنن و بدون هم نمی‌تونن! با استفاده‌ی درست از اینا، می‌تونی برنامه‌هایی بنویسی که سریع، سبک و بدون دردسر باشن 💪


☕️Telegram | Website | Discord
  • ❤‍🔥 7
  • ⚡ 1
  • 🔥 1
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&rlm;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 →