Gopher Academy
3.84K subscribers
931 photos
42 videos
280 files
2.18K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
why, as a gopher, he's excited about Gleam

🟢 خلاصه مقاله:
برای یک توسعه‌دهنده Go، جذابیت Gleam در این است که سادگی و شفافیت Go را با یک سیستم نوع‌دهی قوی و ویژگی‌هایی مثل نبود null، الگو‌تطبیق و داده‌های جبری ترکیب می‌کند، و در عین حال روی Erlang VM (BEAM) اجرا می‌شود تا مزیت فرآیندهای سبک، ارسال پیام و درخت‌های نظارت را به‌صورت ذاتی فراهم کند. این ترکیب برای سرویس‌های همزمان، توزیع‌شده و IO-bound که به تحمل‌پذیری خطا و پایداری نیاز دارند بسیار مناسب است. Gleam با اکوسیستم Erlang/Elixir به‌خوبی سازگار است، به Erlang کامپایل می‌شود و حتی خروجی JavaScript هم دارد، بنابراین می‌توان از کتابخانه‌های جاافتاده استفاده کرد بدون چشم‌پوشی از ایمنی نوعی. ابزارهای توسعه بالغ و کاربرپسند هستند، اما اکوسیستم هنوز جوان است و برای کارهای CPU-bound یا باینری‌های تک‌فایلی سریع، Go همچنان برتری دارد. جمع‌بندی: Go را برای محاسبات سنگین و ابزارها نگه دارید و Gleam را برای سرویس‌های مقاوم و همزمان روی BEAM در نظر بگیرید.

#Gleam #Go #ErlangVM #BEAM #Concurrency #FaultTolerance #FunctionalProgramming #Elixir

🟣لینک مقاله:
https://golangweekly.com/link/175355/web


👑 @gopher_academy
1
🔵 عنوان مقاله
that runs on the Erlang VM.

🟢 خلاصه مقاله:
این مقاله در Golang Weekly به معرفی فناوری‌ای می‌پردازد که روی Erlang VM اجرا می‌شود و برای برنامه‌نویسان Go اهمیت دارد. مقاله مزیت‌های کلیدی Erlang VM مانند فرایندهای سبک، پیام‌رسانی و تحمل خطا را توضیح می‌دهد و آن‌ها را با مدل goroutine و channel در Go مقایسه می‌کند. سپس پیامدهای عملی این تفاوت‌ها را بر مقیاس‌پذیری، تاب‌آوری و تأخیر در سیستم‌های توزیع‌شده، همراه با ملاحظات استقرار، هم‌پیوندی و مشاهده‌پذیری، مرور می‌کند. جمع‌بندی مقاله این است که استفاده از فناوری‌های مبتنی بر Erlang VM می‌تواند برای تیم‌های Go که به دسترس‌پذیری بالا نیاز دارند، مکملی ارزشمند باشد؛ انتخاب نهایی به نیازهای مسئله و تجربه تیم وابسته است.

#ErlangVM #Go #GolangWeekly #Concurrency #DistributedSystems #FaultTolerance #Scalability

🟣لینک مقاله:
https://golangweekly.com/link/175356/web


👑 @gopher_academy
1👍1
🔵 عنوان مقاله
Gist of Go: Atomics

🟢 خلاصه مقاله:
در Go، atomics مجموعه‌ای از عملیات سطح‌پایین در بسته sync/atomic هستند که امکان دسترسی thread-safe و lock-free به مقادیر حافظه مشترک را می‌دهند. آن‌ها برای متغیرهای ساده (مثل شمارنده‌ها، فلگ‌های وضعیت، و تعویض ایمن یک اشاره‌گر پیکربندی) بسیار سریع و مناسب‌اند و با Load/Store، Add/Swap و CAS رابطه‌های happens-before لازم را تضمین می‌کنند. وقتی نیاز به حفظ ناهمبستگی‌های چندفیلدی دارید یا به‌روزرسانی چندمرحله‌ای می‌خواهید، استفاده از mutex یا کانال‌ها شفاف‌تر و کم‌خطرتر است. از اختلاط دسترسی atomic و non-atomic به یک متغیر خودداری کنید، به هم‌ترازی و false sharing توجه کنید، و برای داده‌های read-mostly از atomic.Value بهره ببرید. نتیجه: در سناریوهای محدود، همزمانی بدون mutex واقعا شدنی است—به شرط رعایت دقیق مدل حافظه و الگوهای درست.

#golang #concurrency #atomics #lockfree #CAS #multithreading #memorymodel

🟣لینک مقاله:
https://golangweekly.com/link/175632/web


👑 @gopher_academy
2👍1
🔵 عنوان مقاله
15 Go Subtleties You May Not Already Know

🟢 خلاصه مقاله:
این مقاله یک مرور جمع‌وجور و کاربردی از ۱۵ ظرافت کمترشناخته‌شده در Go است؛ نکاتی که معمولاً در بازبینی کد و اشکال‌زدایی مهم می‌شوند. از تفاوت nil در اینترفیس‌ها تا تفاوت گیرنده‌های اشاره‌ای و مقداری، رفتار slice و map، ترتیب پیمایش map و زمان‌بندی و هزینه defer، همگی با مثال‌های کوتاه بیان شده‌اند. بخش‌هایی درباره همزمانی و الگوهای هماهنگی (جلوگیری از نشت goroutine و استفاده درست از context) و نیز ظرایف کار با زمان—از تفاوت زمان یکنواخت و دیواری تا کار با تایمرها، tickerها و بسته time—هم پوشش داده می‌شود. نتیجه: مطلبی سریع و قابل مرور که حتی اگر فقط چند نکته‌اش برایتان تازه باشد، ارزش خواندن دارد؛ و اگر همه را می‌دانید، حس خوبی از تأیید دانسته‌هایتان می‌گیرید.

#Go #Golang #time #Concurrency #ProgrammingTips #SoftwareEngineering #GoTips

🟣لینک مقاله:
https://golangweekly.com/link/175625/web


👑 @gopher_academy
🔵 عنوان مقاله
How Slow is Channel-Based Iteration?

🟢 خلاصه مقاله:
این مقاله پرسش «تکرار مبتنی بر channel در Go چقدر کند است؟» را با یک مثال عملی بررسی می‌کند. تیم Dolt سه الگو را مقایسه کرده است: دو رویکرد مبتنی بر channel و یک روش iterator کشیدنی با iter.Pull. نتیجه کلی این است که هرچند channel‌ها برای هم‌زمانی، مدیریت فشار برگشتی و جداسازی تولیدکننده/مصرف‌کننده عالی‌اند، اما در حلقه‌های محاسباتیِ حساس به کارایی، سربار همگام‌سازی، زمان‌بندی goroutine و تخصیص‌ها محسوس می‌شود. در مقابل، iter.Pull (و حلقه‌های ساده روی داده‌های خطی) معمولاً سبک‌تر و بهینه‌ترند. توصیه نهایی: وقتی به هم‌زمانی واقعی نیاز دارید از channel استفاده کنید؛ برای مسیرهای داغ که فقط پیمایش می‌خواهند، سراغ iterator کشیدنی یا حلقه‌های ساده بروید.

#Go #Golang #Channels #Iteration #Performance #Benchmarking #Concurrency #Dolt

🟣لینک مقاله:
https://golangweekly.com/link/175626/web


👑 @gopher_academy
1👍1🔥1
🔵 عنوان مقاله
Writing Better Go: Lessons from 10 Code Reviews

🟢 خلاصه مقاله:
** این اسلایدها با عنوان Writing Better Go: Lessons from 10 Code Reviews حاصل ارائه‌ای از Konrad Reiche در GoLab 2025 است و مجموعه‌ای از الگوهای تکرارشونده در بازبینی‌های واقعی کد را به راهنمایی‌های عملی تبدیل می‌کند. محور اصلی، نوشتن کد ساده و خوانا با Go است: طراحی API‌های کوچک و منسجم، نام‌گذاری دقیق، تعریف interface در محل مصرف، استفاده سنجیده از composition، صفر-مقدارهای مفید، عبور منظم context و پرهیز از وضعیت‌های سراسری.

بخش مهمی از درس‌ها به خطاها و ثبت رویداد می‌پردازد: خطاها را به‌عنوان مقدار مدیریت کنید، با %w زمینه اضافه کنید، از panic فقط برای شکست‌های غیرقابل‌بازیابی در آغاز اجرا بهره ببرید، منابع را با defer جمع کنید، و در کتابخانه‌ها به‌جای لاگ‌کردن، خطا برگردانید تا برنامه اصلی مسئول لاگ باشد.

در همروندی، تأکید بر سادگی و ایمنی است: چرخه عمر goroutine‌ها را صریح کنید، آن‌ها را به context گره بزنید، با select روی context.Done() از نشت جلوگیری کنید، و بسته به مسئله از channel یا ابزارهای sync به‌درستی استفاده کنید. بافرگذاری آگاهانه، مستندسازی قراردادها، و اعمال timeout و backpressure در پایپلاین‌ها ضروری است.

برای کیفیت و کارایی، تست‌های جدول‌محور، پوشش مرزی، fuzzing، اجرای race detector، بنچمارک با testing.B و پروفایل با pprof توصیه می‌شود؛ از بهینه‌سازی زودهنگام بپرهیزید و تغییرات را بر اساس اندازه‌گیری انجام دهید.

در نهایت، فرهنگ بازبینی و ابزارهای خودکار نقش کلیدی دارند: یکدستی با gofmt/goimports، بررسی‌های خودکار با go vet و staticcheck در CI، درخواست‌های کوچک با پیام‌های شفاف و تمرکز بازبینی بر درستی، طراحی و نگهداشت‌پذیری. این چک‌لیست عملی می‌تواند فوراً در تیم‌ها و کدبیس‌های Go به کار گرفته شود.

#Go #Golang #CodeReview #GoLab2025 #SoftwareEngineering #BestPractices #Concurrency #ErrorHandling

🟣لینک مقاله:
https://golangweekly.com/link/175975/web


👑 @gopher_academy
👍1
🔵 عنوان مقاله
Durable Background Execution with Go and SQLite

🟢 خلاصه مقاله:
این مقاله نشان می‌دهد چگونه می‌توان با ترکیب Go و SQLite یک سیستم اجرای پس‌زمینه‌ای ساخت که در برابر کرش و راه‌اندازی مجدد مقاوم است، بدون نیاز به سرویس‌های خارجی. الگوی اصلی شامل صف کاری مبتنی بر SQLite با ستون‌هایی برای وضعیت، شمارش تلاش‌ها و زمان اجاره (lease) است؛ کارگرها کار را در تراکنش می‌گیرند، با زمان اجاره کوتاه اجرا می‌کنند، و نتیجه را ثبت می‌کنند تا در صورت کرش، کار دوباره قابل بازیابی باشد. با فعال‌سازی WAL، شاخص‌گذاری درست، backoff نمایی و الزام به idempotency، معمولاً به تضمین at-least-once می‌رسیم. کنترل همزمانی با worker pool، خاموش‌سازی تمیز با سیگنال‌ها و context، و رصد شاخص‌هایی مانند نرخ خطا و زمان پردازش از ملزومات عملیاتی است. برای آزمودن این رفتارها، استفاده از Subtest Grouping in Go (با ایده‌هایی از Dima Kotik و Redowan Delowar) کمک می‌کند سناریوها به‌صورت گروهی، خوانا و قابل موازی‌سازی بررسی شوند.

#Go #SQLite #BackgroundJobs #Durability #GoTesting #Subtests #Concurrency #SoftwareDesign

🟣لینک مقاله:
https://golangweekly.com/link/175982/web


👑 @gopher_academy
👍1
🔵 عنوان مقاله
The Concurrency Conundrum: A Story of Curiosity and Code

🟢 خلاصه مقاله:
**این مقاله داستان برخورد با یک مشکل رایج در همزمانی است: سرویس ظاهراً سالمی که زیر بار گاهی قفل می‌کرد و درخواست‌ها معطل می‌ماندند. با افزودن لاگ‌های ساخت‌یافته، ابزارهای رهگیری و یک تست حداقلیِ قابل‌بازتولید، ریشه مشخص شد: ترتیب‌گیری نادرست قفل‌ها و بخش‌های بحرانی طولانی که به بن‌بست و گاهی رقابت در دسترسی به متغیرها منجر می‌شد. راه‌حل با تعریف نظم ثابت در ترتیب اخذ قفل‌ها، جایگزینی قفل سراسری با قفل‌های ریزدانه و read-write، کوچک‌کردن بخش‌های بحرانی و پرهیز از I/O زیر قفل، به‌کارگیری try-lock با backoff و timeout، و در مسیرهای پرتردد، حرکت به سمت پیام‌محوری به‌جای وضعیت مشترک اجرا شد. سپس با Thread Sanitizer و ابزارهای تشخیص بن‌بست در CI، تست‌های تنشی و مبتنی بر ویژگی، و سنجه‌های مربوط به تراکم قفل، سامانه سخت‌جان‌تر شد. جمع‌بندی: مدل همزمانی را ساده نگه دارید، داده‌های نامتغیر و عملیات idempotent را ترجیح دهید، از سازوکارهای سطح‌بالا استفاده کنید، و ترتیب قفل‌ها و ناوردایی‌ها را مستند و پایش‌پذیر کنید.

#Concurrency #Locking #Deadlock #RaceConditions #Multithreading #Debugging #SoftwareEngineering #Reliability

🟣لینک مقاله:
https://golangweekly.com/link/176333/web


👑 @gopher_academy
👍1
🔵 عنوان مقاله
From 19 Hours to Under a Second: Building a Blazing-Fast TCP Scanner in Go

🟢 خلاصه مقاله:
با یک روایت عملی، مقاله توضیح می‌دهد چگونه یک اسکنر ساده TCP که ۱۹ ساعت طول می‌کشید، با بازطراحی در Go به ابزاری «زیر یک ثانیه» تبدیل شد. ابتدا نشان می‌دهد چرا اسکن مبتنی‌بر net.Dial حتی با همزمانی محدود گرفتار زمان‌های انتظار، محدودیت FD و سربار syscall می‌شود. سپس با گذار از اتصال‌های کامل به اسکن SYN، ساخت بسته‌ها، فیلترکردن پاسخ‌ها با BPF، و نگه‌داری وضعیت سبک‌وزن، سربار کرنل و زمان‌بندی به شدت کاهش می‌یابد. بهینه‌سازی‌هایی مانند batch کردن ارسال/دریافت، پیش‌اختصاص بافرها، کاهش تخصیص‌ها با sync.Pool، و حلقه‌های رویدادی کارا (epoll/kqueue) همراه با تنظیمات سیستم (ulimit، بافرهای سوکتی و sysctl) throughput را به حداکثر می‌رساند. با پروفایل‌کردن مداوم (pprof) و راستی‌آزمایی با ابزاری مانند Nmap، هم دقت و هم کارایی تضمین می‌شود. خروجی نهایی: الگوی عملی برای ساخت ابزارهای پرسرعت شبکه در Go—ترکیبی از انتخاب مدل درست (SYN به‌جای connect)، کاهش سربارها، batch کردن، اندازه‌گیری پیوسته، و پایبندی به اصول ایمنی و اخلاق اسکن. این مطلب در Golang Weekly برجسته شده است.

#Go #Golang #TCP #PortScanning #Networking #Performance #Concurrency #SystemsProgramming

🟣لینک مقاله:
https://golangweekly.com/link/176335/web


👑 @gopher_academy
🔵 عنوان مقاله
their favorite Go related blog posts of all time.

🟢 خلاصه مقاله:
این شماره جدید از خبرنامه Golang Weekly فهرستی منتخب از «بهترین پست‌های وبلاگی مرتبط با Go» را گرد آورده است؛ مجموعه‌ای منسجم که به‌جای فهرست صرفِ لینک‌ها، مسیر مطالعه‌ای ارائه می‌دهد برای درک اصول ماندگار Go. موضوعات کلیدی مانند همروندی با goroutine و channel، خطاپرداری شفاف، استفاده از interface و ترکیب‌پذیری، آزمون‌نویسی و ابزارها، همچنین بهینه‌سازی کارایی، پروفایلینگ و مدیریت حافظه پوشش داده می‌شوند. هر انتخاب با توضیحی کوتاه درباره ارزش ماندگارش و اینکه به درد چه کسی و چه مسئله‌ای می‌خورد همراه است؛ نوآموزان می‌توانند آن را نقشه راه یادگیری بدانند و باتجربه‌ها نیز برای بازبینی مبانی و دیدگاه‌های عمیق‌تر از آن بهره ببرند. این گردآوری تصویری از مسیر بلوغ جامعه Go نیز ارائه می‌کند؛ از نوشته‌های اولیه که روحیه طراحی زبان را شکل دادند تا جمع‌بندی‌های اخیر که بر تجربه‌های تولیدی تکیه دارند—مجموعه‌ای برای نشان‌گذاری، اشتراک با تیم و رجوع‌های مکرر.

#Go #Golang #GolangWeekly #Programming #SoftwareEngineering #Concurrency #GoTips #DevCommunity

🟣لینک مقاله:
https://golangweekly.com/link/176329/web


👑 @gopher_academy
👍1