Gopher Academy
3.85K subscribers
930 photos
41 videos
280 files
2.14K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
Forwarded from Linux Labdon
با مفاهیم deadlock و علت‌هایی که ممکنه منجر بهش بشه توی این سایت بصورت عملی آشنا بشید.

#Concurrency #Deadlock #Operating #System #OS #linux #C #Race #condition

https://deadlockempire.github.io


👑 @linux_labdon
👍2💅1
🔵 عنوان مقاله
explains more, including why this matters.

🟢 خلاصه مقاله:
آخرین شماره Golang Weekly مقاله‌ای دارد که یک موضوع به‌روز در اکوسیستم Go را با زمینه‌سازی روشن و کاربردی شرح می‌دهد: چرا اکنون مهم است، چه مزایا و ملاحظاتی دارد و چه بده‌بستان‌هایی پیشِ‌روست. با توضیح‌های فشرده و مثال‌های قابل اتکا، الگوهای مناسب تولید، خطاهای رایج و مسیرهای مهاجرت برای سرویس‌ها و کتابخانه‌ها را نشان می‌دهد. همچنین به پیامدهای معمول چنین تغییراتی بر modules، مدیریت وابستگی، CI، راهبرد تست، بنچ‌مارک و پروفایلینگ می‌پردازد و راهکارهایی برای کاهش ریسک و سازگاری پیشنهاد می‌کند. در پایان، اثر آن بر جامعه و تیم‌ها را جمع‌بندی کرده و منابع تکمیلی برای مطالعه بیش‌تر معرفی می‌کند؛ نکاتی عملی، چه برای بک‌اند‌های پُرترافیک و چه برای CLIهای کوچک.

#Go #Golang #GolangWeekly #SoftwareEngineering #Backend #DevOps #Performance #Concurrency

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


👑 @gopher_academy
👍1🔥1
🔵 عنوان مقاله
How Fast is Go? Simulating Millions of Particles on a Smart TV

🟢 خلاصه مقاله:
این مقاله با اجرای یک شبیه‌سازی بزرگ روی یک Smart TV نشان می‌دهد Go در عمل چقدر سریع است. نتیجه اصلی: شبیه‌سازی ۲.۵ میلیون ذره با نرخ ۶۰ فریم‌برثانیه و هم‌زمان ارسال داده با ۳۰ فریم‌برثانیه به بیش از ۳۰۰ کلاینت (و احتمالاً تا حدود هزار) ممکن شده است. ترکیب کار محاسباتی سنگین و ارسال شبکه هم‌زمان، توان Go در مدیریت بارهای بلادرنگ و استفاده مؤثر از همزمانی را نشان می‌دهد. با بهینه‌سازی تخصیص حافظه و استفاده از الگوهای همزمانی Go، تأثیر GC کم و تأخیر قابل‌پیش‌بینی باقی مانده و سیستم روی دستگاهی محدود مثل Smart TV نیز پایدار عمل می‌کند.

#Go #Golang #Performance #Concurrency #RealTime #SmartTV #Simulation #Scalability

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


👑 @gopher_academy
🍾22
🔵 عنوان مقاله
Go's Support for Valgrind Instrumentation

🟢 خلاصه مقاله:
این مقاله درباره پشتیبانی آزمایشی Go از Valgrind است؛ چارچوبی که با ابزارهایی مانند Memcheck، Helgrind، DRD، Cachegrind، Callgrind و Massif برای پروفایلینگ و یافتن خطاهای حافظه و هم‌زمانی به‌کار می‌رود. با این پشتیبانی، برنامه‌های Go می‌توانند به شکل عمیق‌تری پایش شوند—به‌ویژه در مرزهای cgo—و علاوه بر ابزارهای داخلی مانند pprof و race detector، گزینه‌های تشخیصی بیشتری در اختیار دارند. بااین‌حال، به دلیل سربار اجرایی بالا و ماهیت آزمایشی، نتایج ممکن است شامل خطا یا مثبت کاذب باشد و بهتر است با بیلدهای دیباگ و بارهای کاری کنترل‌شده استفاده شود. این قابلیت مکمل ابزارهای بومی Go است و جایگزین آن‌ها محسوب نمی‌شود.
#Go #Valgrind #Instrumentation #Profiling #MemoryLeaks #Concurrency #Performance #Debugging

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


👑 @gopher_academy
3
🔵 عنوان مقاله
Practical Networking Patterns in Go

🟢 خلاصه مقاله:
** این بخش تازه از Go Optimization Guide مجموعه‌ای از ۱۳ راهنما را ارائه می‌کند که به شکل عملی ساخت اپلیکیشن‌های شبکه‌ای مقیاس‌پذیر با Go را پوشش می‌دهند. محورهای اصلی شامل دستیابی به «همزمانی بسیار بالا»، الگوهای مدیریت اتصال، کنترل فشار، زمان‌بندی و لغو عملیات، همراه با بنچمارک‌گیری واقع‌گرایانه و عیب‌یابی مبتنی بر سنجه‌ها، پروفایلینگ و تِرِیسینگ است. همچنین درباره انتخاب و پیکربندی پروتکل‌های انتقال، مدیریت خطا، اندازه‌گیری بافرها و تنظیمات سطح پایین برای پایداری و عملکرد بهتر توضیح می‌دهد. خروجی نهایی مجموعه‌ای از الگوهای عملی و چک‌لیست‌هاست که به تیم‌ها کمک می‌کند توان عملیاتی را افزایش دهند، تأخیرهای دُم توزیع را کاهش دهند و سرویس‌های Go را در مقیاس به‌صورت پایدار و شفاف اداره کنند.

#Go #Golang #Networking #Concurrency #Benchmarking #Performance #Scalability #Systems

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


👑 @gopher_academy
2
🔵 عنوان مقاله
Starving, Sleeping, and Yielding: Understanding Go's Scheduler

🟢 خلاصه مقاله:
** این مقاله توضیح می‌دهد که چرا درک رفتار همزمان در Go به شناخت زمان‌بند آن بستگی دارد. زمان‌بند با مدل G‑M‑P، goroutineها را روی نخ‌های سیستم‌عامل اجرا می‌کند، آن‌ها را هنگام بلاک‌شدن پارک می‌کند و با netpoller برای I/O هماهنگ می‌شود. سه وضعیت کلیدی بررسی می‌شود: Starvation وقتی رخ می‌دهد که goroutineهای آماده اجرا به‌دلیل لوپ‌های سنگین CPU، الگوهای ناعادلانه در select، یا قفل‌ها و syscall/cgo طولانی به CPU دسترسی پیدا نمی‌کنند؛ Sleeping با time.Sleep برای توقف کنترل‌شده مفید است اما می‌تواند تأخیر بسازد؛ و Yielding با runtime.Gosched امکان می‌دهد در حلقه‌های CPU‑محور به دیگر goroutineها نوبت بدهیم. از Go 1.14 به بعد، preemption غیرهمکارانه کمک کرده، اما حلقه‌های بدون نقطه توقف هنوز مشکل‌سازند. راهکارها شامل شکستن کارهای سنگین به بخش‌های کوچک، پرهیز از busy‑wait، استفاده از context و timeout، طراحی منصفانه channel/select، کوچک نگه‌داشتن بخش‌های بحرانی و تنظیم GOMAXPROCS است. برای عیب‌یابی نیز از go tool trace، runtime/trace، pprof و GODEBUG=schedtrace استفاده کنید و فقط در صورت نیاز، sleep یا yield موضعی و مستند به کار ببرید.

#Go #Golang #Concurrency #Scheduler #Goroutines #Performance #Parallelism #Systems

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


👑 @gopher_academy
1
🔵 عنوان مقاله
take control with Tuple

🟢 خلاصه مقاله:
این مطلب از Golang Weekly نشان می‌دهد چگونه به‌کارگیری سنجیده Tuple می‌تواند به توسعه‌دهندگان Go کمک کند روی جریان داده، مدیریت خطا و هم‌زمانی کنترل بیشتری داشته باشند. در این رویکرد، Tuple راهی فشرده برای بستن چند مقدار مرتبط در یک واحد نوع‌دار است که با تکیه بر جنریک‌ها، ضمن کاهش کد تکراری، نیت کد و امضای توابع را شفاف‌تر می‌کند. کاربردهای کلیدی شامل مدل‌سازی بار داده‌ی کانال‌ها، جمع‌آوری خروجی‌ها در الگوهای فن‌اوت/فن‌این و عبور جفت‌هایی مانند (value, error) در پایپلاین‌هاست؛ با این تأکید که هرجا یک مفهوم دامنه‌ای نام‌دار لازم است، یک struct کوچک همچنان گزینه‌ی بهتر است. جمع‌بندی: Tuple گلوله‌ی نقره‌ای نیست، اما اگر هدفمند استفاده شود، بدون لطمه به خوانایی یا ایمنی نوعی، کنترل و شفافیت بیشتری به کدهای Go می‌دهد و می‌توان آن را به‌صورت تدریجی در مرز پکیج‌ها و پایپلاین‌ها به کار گرفت.

#Golang #Go #Tuple #GolangWeekly #Generics #Concurrency #TypeSafety #SoftwareDesign

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


👑 @gopher_academy
👍2
🔵 عنوان مقاله
Building a Coding Agent in Go from Scratch

🟢 خلاصه مقاله:
این مجموعه سه مطلب عملی برای توسعه‌دهندگان Go را کنار هم می‌گذارد: ساخت یک coding agent از صفر در Go، استفاده از Timing Wheels برای انقضای کارآمد ۱۰ میلیون کلید بدون اسکن‌های O(n)، و مروری دقیق بر sync شامل Mutex، RWMutex، WaitGroup، Once، Cond و Pool. بخش agent بر معماری ماژولار، هماهنگی goroutine و channel، sandbox امن و حلقه بازخورد برای اجرای کد و بهبود تدریجی تأکید دارد. نوشته Bill Kennedy نشان می‌دهد چگونه با سطل‌بندی زمان‌سنج‌ها و حرکت چرخ، سربار و نوسان تأخیر کاهش می‌یابد و حتی در مقیاس بزرگ پایدار می‌ماند. در نهایت، مرور sync توصیه‌های عملی برای انتخاب درست بین primitives و channel، کاهش contention، و ارزیابی با benchmark، pprof و race detector ارائه می‌کند تا سامانه‌های Go هم هوشمند و هم سریع باشند.

#Go #Golang #Concurrency #TimingWheels #sync #SystemsProgramming #GoInternals #Performance

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


👑 @gopher_academy
3👍1
🔵 عنوان مقاله
How to Reproduce and Fix an I/O Data Race with Go and DTrace

🟢 خلاصه مقاله:
در این مقاله نویسنده با یک باگ مبهم روبه‌رو می‌شود که فقط در CI رخ می‌دهد: یک data race در سطح I/O فایل‌ها که باعث شکست گهگاه تست‌ها می‌شود. چون این رقابت در مرز فایل‌سیستم رخ می‌دهد و نه در حافظه مشترک، ابزار race detector در Go آن را تشخیص نمی‌دهد. برای بازتولید محلی، نویسنده شرایط شبیه CI را ایجاد می‌کند: اجرای تکراری تست‌ها، افزایش همزمانی، و ایجاد تنوع زمانی تا ترتیب‌های نادری که خطا را می‌سازند آشکار شوند. با استفاده از DTrace و رصد فراخوانی‌های سیستمی مانند open، write، fsync و rename، الگوی واقعی آشکار می‌شود: خواندن فایل همزمان با نوشتن/حذف جزئی یا قبل از تحویل اتمی محتوا.

راهکار با اتمی‌سازی و هماهنگ‌سازی است: نوشتن در فایل موقت و سپس os.Rename برای تحویل اتمی، افزودن fsync در نقاط لازم، و در صورت نیاز قفل/کانال برای سریال‌سازی دسترسی به مسیرهای مشترک. در تست‌ها نیز از t.TempDir() برای جداسازی حالت، پرهیز از تکیه بر mtime، و اتکا به سیگنال‌های قطعی به‌جای تأخیرهای زمانی استفاده می‌شود. نتیجه، حذف flaky بودن در CI و همگرایی رفتار محلی و CI است؛ و درس اصلی اینکه برای رقابت‌های I/O باید به ابزارهای ردیابی سطح سیستم تکیه کرد و پروتکل I/O را صریح و اتمی طراحی نمود.

#Go #DTrace #Concurrency #CI #Filesystem #Testing #Debugging #RaceCondition

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


👑 @gopher_academy
🔵 عنوان مقاله
Constraining LLMs with Structured Output in Python and Go

🟢 خلاصه مقاله:
**این مجموعه به روش‌های عملی برای واداشتن LLMها به تولید خروجی ساخت‌یافته می‌پردازد تا ادغام در سیستم‌های تولیدی قابل اعتماد، قابل اعتبارسنجی و قابل آزمون باشد. در Python با تعریف شِماهای سازگار با JSON و اتصال خروجی مدل به انواع مشخص، و در Go با استفاده از structهای نوع‌دار، struct tagها، و خطاهای صریح، خطر خروجی متنی آزاد و شکننده کاهش می‌یابد.

همچنین یک ویدئو از Rost Glukhov ساخت یک عامل کدنویس در Go را از ابتدا نشان می‌دهد؛ از طراحی پرامپت و برنامه‌ریزی تا اجرای ابزار و حلقه بازخورد. در بخش کارهای زمان‌بندی انبوه، مقاله Bill Kennedy توضیح می‌دهد چگونه Timing Wheels بدون پیمایش O(n) می‌توانند میلیون‌ها کلید را منقضی کنند—الگویی مفید برای زمان‌بندی‌کننده‌ها، کش‌ها و محدودکننده‌های نرخ در Go. برای درک عمیق‌تر همروندی، نوشتار Ankur Anand رفتار و انتخاب‌های درست پیرامون primitives بسته sync مانند Mutex، RWMutex، WaitGroup و Cond را تشریح می‌کند. در پایان، مطلبی از Matheus Mina این مجموعه را کامل می‌کند. حاصل کار، جعبه‌ابزاری عملی برای ساخت عامل‌ها و سرویس‌های پربازده در Python و Go است.

#Go #Python #LLM #StructuredOutput #TimingWheels #Concurrency #Golang #Agents

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


👑 @gopher_academy
2
🔵 عنوان مقاله
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