Gopher Academy
3.87K subscribers
930 photos
41 videos
280 files
2.11K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
celebrates its tenth anniversary with a look

🟢 خلاصه مقاله:
این مقاله دهمین سالگرد یک ابزار زیرساختی متن‌باز مبتنی بر Go را جشن می‌گیرد و نشان می‌دهد چگونه از یک ابزار کوچک به مولفه‌ای بالغ و شناخته‌شده در تیم‌های DevOps و SRE تبدیل شده است؛ با بهبودهای کارایی و پایداری، معماری افزونه‌پذیر، API/CLI پایدار و تمرکز جدی بر امنیت و زنجیره تأمین. اکوسیستم آن با جامعه‌ای پویا، مستندات بهتر، نسخه‌بندی معنادار، سازگاری عقب‌رو و یکپارچگی گسترده با فضای ابری، CI/CD و ابزارهای مشاهده‌پذیری رشد کرده است. در ادامه، نقشه‌راه بر بهبود تجربه کاربری، غنی‌تر شدن API/SDK، تقویت policy-as-code، مدیریت بهتر وضعیت و دریفت، و اتوماسیون ایمن‌تر در مقیاس تأکید می‌کند.

#Go #Infrastructure #DevOps #OpenSource #Cloud #Automation #Security #Observability

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


👑 @gopher_academy
🔵 عنوان مقاله
Slice Tails Don't Grow Forever

🟢 خلاصه مقاله:
** این مطلب از Golang Weekly توضیح می‌دهد که در Go، وقتی از یک slice یک “tail” مثل s[i:] می‌سازیم، رشد آن به capacity وابسته است و پایدار و بی‌نهایت نیست. تا وقتی capacity اجازه دهد، append روی همان آرایه‌ی پشتی انجام می‌شود؛ اما به‌محض عبور از capacity، runtime آرایه‌ی جدیدی می‌سازد و داده‌ها را کپی می‌کند، در نتیجه اشتراک حافظه با sliceهای قبلی از بین می‌رود. این رفتار هم می‌تواند باعث شگفتی در منطق اشتراک‌گذاری داده‌ها شود و هم روی کارایی و مصرف حافظه اثر بگذارد (مثلاً نگه‌داشتن یک زیر-slice کوچک می‌تواند یک آرایه‌ی بزرگ را در حافظه زنده نگه دارد). نتیجهٔ عملی: روی رشد بی‌نهایت tail حساب نکنید، خروجی append را یک slice بالقوه با آرایه‌ی پشتی جدید در نظر بگیرید، برای آزادسازی حافظه از copy استفاده کنید، در صورت نیاز capacity مناسب را از قبل با make در نظر بگیرید و حتماً با benchmark تصمیم بگیرید.

#Go #Golang #Slices #Append #MemoryManagement #Performance #GolangWeekly

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


👑 @gopher_academy
🤝1
🔵 عنوان مقاله
'We Tried Go's Experimental Green Tea Garbage Collector and It Didn't Help Performance'

🟢 خلاصه مقاله:
** تیم Dolt در Go 1.25 جمع‌آورنده زباله آزمایشی Green Tea را فعال و ارزیابی کرد، اما در سناریوی خاص خود بهبود محسوسی در کارایی مشاهده نکرد. با این حال، از آنجا که رفتار GC به نوع بار کاری وابسته است و Green Tea همچنان آزمایشی و اختیاری است، توصیه می‌شود هر تیم آن را در محیط و بنچمارک‌های خود امتحان کرده و بر اساس شاخص‌های واقعی تصمیم بگیرد.

#Go #Golang #GarbageCollector #GreenTea #Performance #Benchmarking #Dolt #Go1_25

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


👑 @gopher_academy
1
🔵 عنوان مقاله
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
🔵 عنوان مقاله
Accepted! Go Proposals Distilled

🟢 خلاصه مقاله:
این مجموعه با عنوان Accepted! Go Proposals Distilled خلاصه‌ای روان از پیشنهادهای پذیرفته‌شده زبان Go ارائه می‌کند تا بدون خواندن کل پروپوزال‌ها، سریع از تغییرات نسخه‌های آینده باخبر شوید. هر پست دلیل پذیرش، تغییرات و کاربرد عملی آن را خلاصه می‌کند. تاکنون Anton موضوع maphash را پوشش داده و ادامهٔ سری نیز هم‌زمان با پیشروی پیشنهادهای پذیرفته‌شده منتشر خواهد شد.

#Go #Golang #GoProposals #GoUpdates #ProgrammingLanguages #DeveloperNews #Maphash

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


👑 @gopher_academy
👍1🎉11
🔵 عنوان مقاله
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
🔵 عنوان مقاله
Register Allocation in the Go Compiler

🟢 خلاصه مقاله:
** این یادداشت دو موضوع فنی اما اثرگذار بر کارایی در Go را کنار هم می‌گذارد: نحوه تخصیص ثبات در کامپایلر و این واقعیت که «دمِ Sliceها برای همیشه رشد نمی‌کند». بخش نخست با الهام از تجربه‌های Vladimir Makarov در دنیای تخصیص ثبات توضیح می‌دهد که پشت‌صحنه‌ی SSA در کامپایلر Go چگونه محدوده‌های حیات متغیرها را روی تعداد کمی ثبات سخت‌افزاری نگاشت می‌کند، φها را حل و حرکت‌ها را ادغام می‌کند و در صورت نیاز سرریز به پشته انجام می‌دهد. چالش اصلی، حفظ کیفیت کد (کاهش حرکت‌ها و سرریزها) در کنار سرعت بالای کامپایل است؛ و ایده‌هایی مانند ترکیب رویکردهای linear-scan و coloring، مدیریت دقیق ثبات‌های caller/callee-saved، سرریز در مسیرهای کم‌احتمال و rematerialization انتخابی به ایجاد این توازن کمک می‌کنند.

بخش دوم، با تکیه بر نوشته‌ی Ted Unangst، یادآور می‌شود که Slice در Go تنها وصله‌ای روی یک آرایه مشترک است: append می‌تواند باعث تخصیص دوباره و کپی شود، رشد ظرفیت با بزرگ‌تر شدن Slice کند می‌شود، و با sub-slice ممکن است حافظه‌ی «سرِ» حذف‌شده همچنان نگه داشته شود. «دمِ» Slice بدون ظرفیت کافی گسترش نمی‌یابد و برای رها شدن حافظه‌ی قدیمی باید گاهی به یک آرایه‌ی تازه کپی کنید. راهکارها شامل استفاده از make با ظرفیت مناسب، پرهیز از نگه‌داشتن referenceهای ناخواسته به آرایه‌ی بزرگ و کپی آگاهانه برای آزادسازی حافظه است.

جمع‌بندی: همان‌طور که انتخاب‌های تخصیص ثبات روی تعداد دستورها و سرریز اثر می‌گذارد، الگوهای کار با Slice نیز روی مصرف حافظه و فشار GC اثر دارند. درک این جزئیات به کدی چابک‌تر، تأخیر پایدارتر و رفتار قابل پیش‌بینی‌تر در سرویس‌های Go منجر می‌شود.

#Go #Golang #Compiler #RegisterAllocation #Performance #MemoryManagement #Slices #SystemsProgramming

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


👑 @gopher_academy
1🎉1🍾1
🔵 عنوان مقاله
The new() Function Will Take an Expression in Go 1.26

🟢 خلاصه مقاله:
در Go 1.26 یک بهبود کوچک اما کاربردی می‌آید: تابع new() می‌تواند یک عبارت بگیرد، نه فقط یک نوع؛ Chris Siebenmann توضیح می‌دهد که این تغییر برخی الگوهای تخصیص و مقداردهی را ساده‌تر و خواناتر می‌کند. Tim Little با استفاده از raylib-go یک شبیه‌سازی آب بلادرنگ در Go می‌سازد و نشان می‌دهد چگونه می‌توان با ترکیب کارایی Go و سادگی raylib، رندر و فیزیک ساده را پیاده‌سازی کرد. Vladimir Makarov به تخصیص ثبات در کامپایلر Go می‌پردازد و تأثیر آن بر کارایی، استراتژی‌ها و ملاحظات بخش SSA را شرح می‌دهد. در نهایت، Ted Unangst یادآوری می‌کند که «دم» برش‌ها در Go بی‌نهایت رشد نمی‌کند و باید به ظرفیت، بازبرش و رفتار append توجه کرد تا از خطاها و افت کارایی جلوگیری شود.

#Go #Golang #Go126 #Compiler #RegisterAllocation #raylib #GameDev #Slices

🟣لینک مقاله:
https://golangweekly.com/link/175062/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
🔵 عنوان مقاله
How Cloudflare Found a Bug in Go's arm64 Compiler

🟢 خلاصه مقاله:
Cloudflare در مقیاسی بسیار بزرگ از Go روی زیرساخت‌های متنوع، به‌ویژه arm64، استفاده می‌کند؛ جایی که خطاهای نادر هم به‌دفعات رخ می‌دهند. آن‌ها با مجموعه‌ای از اختلال‌های پراکنده که فقط در بیلدهای arm64 دیده می‌شد مواجه شدند و با مقایسه میان معماری‌ها، کاناری‌کردن، و ساخت یک نمونه حداقلی، سرنخ‌ها را از منطق برنامه به سمت ابزار ساخت هدایت کردند. ریشه مشکل، یک خطای تولید کد در بخش arm64 کامپایلر Go بود که در شرایط خاص به بدترجمه‌سازی منجر می‌شد. تیم Cloudflare با همکاری تیم Go، مشکل را گزارش، بازتولید و برطرف کرد و پس از انتشار پچ، آن را به‌صورت مرحله‌ای در کل ناوگان اعمال نمود. نتیجه این تجربه: آزمون میان‌معماری، کاناری‌کردن ارتقاهای ابزار، و تقویت مشاهده‌پذیری برای مقابله با خطاهای کم‌شیوع اما پرهزینه در مقیاس بالا حیاتی است.

#Cloudflare #Go #arm64 #Compiler #Bug #ProductionScale #Reliability #OpenSource

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


👑 @gopher_academy
1
🔵 عنوان مقاله
PG Back Web 0.5: A Postgres Backup System with Web Interface

🟢 خلاصه مقاله:
** PG Back Web 0.5 یک ابزار مبتنی بر Go برای مدیریت پشتیبان‌گیری‌های Postgres از طریق یک رابط وب ساده و کاربرپسند است. این برنامه امکان زمان‌بندی پشتیبان‌ها، پایش وضعیت و مشاهده تاریخچه را فراهم می‌کند و با webhooks می‌تواند اعلان‌ها را به سامانه‌های بیرونی ارسال کند. استقرار آن به‌صورت Docker image بسیار ساده است و در نسخه 0.5 پشتیبانی از Postgres 18 نیز اضافه شده تا با آخرین نسخه Postgres سازگار باشد.

#Postgres #Backup #Go #Docker #Database #DevOps #Webhooks #Monitoring

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


👑 @gopher_academy
1
🔵 عنوان مقاله
yzma: Perform Local Inference with VLMs and LLMs

🟢 خلاصه مقاله:
yzma راهی سبک برای اجرای محلی VLMs و LLMs درون برنامه‌های Go است. این ابزار با استفاده از purego و ffi مستقیماً به llama متصل می‌شود و سربار اضافی را کاهش می‌دهد، در نتیجه تأخیر پایین‌تر، کنترل بهتر و اجرای آفلاین فراهم می‌شود. تمرکز yzma بر ادغام ساده در سرویس‌ها و ابزارهای Go است تا بتوان هم پردازش متن و هم سناریوهای تصویر-متن را بدون اتکا به سرویس‌های ابری انجام داد.

#Go #LLM #VLM #LocalInference #FFI #purego #llama #OnDeviceAI

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


👑 @gopher_academy
🔵 عنوان مقاله
qjs: Run JavaScript in Go

🟢 خلاصه مقاله:
qjs یک روش تازه برای اجرای JavaScript داخل اپ‌های Go است که بدون نیاز به Cgo کار می‌کند. به‌جای اتصال به یک کتابخانه بومی، نسخه فورک‌شده‌ای از QuickJS را به WebAssembly کامپایل کرده و آن را زیر Wazero اجرا می‌کند. این رویکرد کل زنجیره را در محیط خالص Go نگه می‌دارد و فرایند بیلد، استاتیک‌سازی و کراس‌کامپایل را ساده‌تر می‌کند. مزیت دیگر، ایزوله‌سازی و سندباکس طبیعی ناشی از WebAssembly است. هرچند احتمالاً نسبت به اتصال بومی اندکی سربار دارد، اما برای سناریوهایی مثل اسکریپت‌نویسی، افزونه‌ها و اجرای امن منطق کاربر، توازن خوبی بین سادگی، پرتابل‌بودن و امنیت ارائه می‌دهد.

#Go #JavaScript #WebAssembly #Wazero #QuickJS #Cgo #GoLang #Embedding

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


👑 @gopher_academy
🔵 عنوان مقاله
Terminating Elegantly: A Guide to Graceful Shutdowns

🟢 خلاصه مقاله:
ترک شایسته در سرویس‌ها یعنی برنامه بتواند با دریافت SIGTERM، بدون از دست دادن داده یا خراب کردن وضعیت، درخواست‌های جاری را تمام کند و منابع را درست آزاد کند. در این ارائه، Alex Pliutau با تمرکز بر Go در Kubernetes، چرخه کامل خاتمه را توضیح می‌دهد: از دریافت سیگنال و قطع‌کردن ترافیک تا ضرب‌الاجل SIGKILL.

نکته‌های کلیدی شامل این‌هاست: استفاده از signal.NotifyContext و context برای لغو هماهنگ، مدیریت goroutineها با sync.WaitGroup، فراخوانی http.Server.Shutdown یا معادل gRPC برای تخلیه امن اتصال‌ها، و توقف گرفتن کار جدید در Workerها درحالی‌که کارهای درحال اجرا به‌صورت زمان‌دار تمام می‌شوند. در Kubernetes باید readiness زودتر غیرفعال شود تا Pod از مسیر ترافیک خارج شود، از preStop برای تأخیر یا Drain سفارشی کمک بگیرید، و terminationGracePeriodSeconds را درست تنظیم کنید. پایش و آزمون نیز ضروری است: لاگ شروع/پایان Shutdown، سنجه‌هایی مثل تعداد درخواست‌های درحال پردازش و زمان خاتمه، و تست SIGTERM تحت بار. رعایت این الگوهای ساده، خاتمه‌ای قابل اعتماد و بدون اختلال در Go روی Kubernetes فراهم می‌کند.

#Go #Kubernetes #GracefulShutdown #CloudNative #Microservices #DevOps #Reliability #ProductionOps

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


👑 @gopher_academy
🔵 عنوان مقاله
Go v1.25.2 and v1.24.8 have been released

🟢 خلاصه مقاله:
به‌روزرسانی‌های Go در نسخه‌های v1.25.2 و v1.24.8 منتشر شده‌اند که مجموعه‌ای از اصلاحات امنیتی را در بسته‌های مختلف ارائه می‌کند. این نسخه‌ها از نوع وصله‌ای و سازگار به عقب هستند و بدون تغییر در رفتار زبان، امنیت و پایداری ابزارها و کتابخانه‌ها را بهبود می‌دهند. توصیه می‌شود هرچه سریع‌تر به آخرین وصله در شاخه فعلی‌تان ارتقا دهید (برای v1.25 به v1.25.2 و برای v1.24 به v1.24.8)، یادداشت‌های انتشار و هر CVE مرتبط را بررسی کنید، باینری‌ها را مجدداً بسازید و ابزارهایی مانند govulncheck را برای شناسایی وابستگی‌های آسیب‌پذیر اجرا کنید.

#Go #Golang #Security #Update #PatchRelease #CVE #DevOps #SoftwareMaintenance

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


👑 @gopher_academy
👍1