Gopher Academy
3.86K subscribers
936 photos
43 videos
280 files
2.29K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
'Re-exec' Testing Go Subprocesses

🟢 خلاصه مقاله:
در این مقاله، روشی جایگزین برای آزمایش کدهای زبان Go ارائه شده است که در آن از فرآیندهای زیرشاخه یا subprocess‌ها استفاده می‌شود. این روش به توسعه‌دهندگان کمک می‌کند تا برنامه‌های دارای subprocess را به شیوه‌ای موثرتر و قابل اطمینان‌تر آزمایش کنند. در این رویکرد، به جای اجرای مستقیم تابع‌های مرتبط با subprocess، فرآیندهای مستقلی راه‌اندازی می‌شوند که امکان کنترل و ارزیابی بهتر کارکرد آن‌ها فراهم می‌شود.

استفاده از این رویکرد در مواقعی مفید است که برنامه‌های Go شما وابسته به عملیات‌های خارجی، مانند اجرای دستورات سیستم یا ارتباط با سایر برنامه‌ها باشد. با این روش، می‌توان رفتاری مشابه حالت واقعی را شبیه‌سازی کرد و خطاهای احتمالی در زیرساخت‌های خارجی را در فرآیندهای آزمایشی شناسایی و رفع کرد. این شیوه، به صورت کلی، پختگی و اعتبار بیشتری به فرآیندهای تست برنامه‌های مبتنی بر subprocess می‌بخشد.

در نهایت، این رویکرد، روشی کارآمد برای توسعه‌دهندگانی است که نیاز دارند تست‌های جامع و قابل اعتماد برای برنامه‌هایی با subprocess بنویسند و به بهبود کیفیت کدهای خود در محیط‌های مختلف کمک کنند.

#تست_کد #زبان_برنامه_نویسی_Go #processes #توسعه_نرم‌افزار

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


👑 @gopher_academy
🔵 عنوان مقاله
a progress update on how it's going

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

#تایپ‌اسکریپت #پیشرفت_توسعه #بهبود_کارایی #برنامه‌نویسی

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


👑 @gopher_academy
🔵 عنوان مقاله
Katana 1.3: A Web Crawling and Spidering Framework

🟢 خلاصه مقاله:
کتانای ۱.۳: فریم‌ورک قدرتمند برای خزیدن و شاخه‌زنی در وب

کتانیای ۱.۳ یک ابزار قدرتمند و انعطاف‌پذیر است که بر پایه زبان برنامه‌نویسی Go توسعه یافته است. این ابزار برای انجام عملیات خزیدن در وب طراحی شده و می‌تواند به صورت مستقل یا به عنوان یک کتابخانه قابل ادغام در سایر برنامه‌ها مورد استفاده قرار گیرد. یکی از ویژگی‌های برجسته این فریم‌ورک، قابلیت کار در حالت‌های بدون سر (headless) و غیر بدون سر است، بنابراین می‌تواند در محیط‌های مختلف و با نیازهای متفاوت به خوبی عمل کند.

علاوه بر این، کتانای ۱.۳ امکانات متنوعی برای شخصی‌سازی ارائه می‌دهد که کاربران را قادر می‌سازد به صورت دقیق و مطابق با نیازهای خود تنظیمات لازم را انجام دهند. از تنظیمات مربوط به مرورگر، مدیریت کوکی‌ها، تنظیمات رزولوشن، تا کنترل کامل بر روند خزیدن و استخراج داده‌ها، همگی قابل تنظیم هستند و به کاربران انعطاف و کنترل بالایی می‌بخشند. این قابلیت‌ها، کتانای ۱.۳ را به ابزاری قدرتمند و مناسب برای توسعه‌دهندگان، محققان داده و افرادی تبدیل می‌کند که نیازمند جمع‌آوری داده‌های وسیع و دقیق از وب هستند.

در مجموع، کتانای ۱.۳ با طراحی مدرن و قابلیت‌های بی‌نظیر، یکی از بهترین انتخاب‌ها برای پروژه‌های خزیدن در وب و گردآوری اطلاعات است که انعطاف و کارایی بالا را در اختیار کاربران قرار می‌دهد.

#وب_خزینی #کتانای_گو #جمع‌آوری_اطلاعات #برنامه‌نویسی

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


👑 @gopher_academy
🔵 عنوان مقاله
Reddit Discusses: Why are Interfaces Implicit?

🟢 خلاصه مقاله:
در یک بحث در ردیت، کاربری سوال می‌کند: «چرا پیاده‌سازی رابط‌ها به صورت ضمنی است؟ این موضوع باعث می‌شود دیدن اینکه کدام ساختارها کدام رابط‌ها را پیاده‌سازی می‌کنند، بسیار دشوارتر شود.» این پرسش باعث به وجود آمدن گفتگوهای زیادی شد، چون این موضوع یکی از نکات چالش‌برانگیز در طراحی زبان‌های برنامه‌نویسی است که بسیاری را فعال کرده است.
در سیستم‌هایی که پیاده‌سازی رابط‌ها به صورت صریح و آشکار تعریف می‌شود، توسعه‌دهندگان می‌توانند آسان‌تر ساختارهای موردنظرشان را بر اساس نیاز انتخاب و تشخیص دهند. اما در نمونه‌هایی که پیاده‌سازی‌ها به صورت ضمنی است، کنترل و درک کد کمی سخت‌تر می‌شود؛ چرا که لازم است توسعه‌دهنده بیشتر جزئیات را با نگاه کردن به کدهای دیگر یا کامپایلر پیدا کند.
این روش در زبان‌هایی مانند Go رایج است، جایی که بهره‌گیری از پیاده‌سازی‌های ضمنی باعث ساده‌سازی و کاهش حجم کد می‌شود، هرچند ممکن است فهم آن برای تازه‌واردان کمی مشکل باشد. در نهایت، این موضوع نشان‌دهنده‌ trade-off بین سادگی و شفافیت در طراحی زبان‌های برنامه‌نویسی است، جایی که هر روش مزایا و معایب خاص خودش را دارد.
#رابط #برنامه‌نویسی #دامنه_کاربرد #نکات_فنی

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


👑 @gopher_academy
🔵 عنوان مقاله
Gitmal: A Static Page Generator for Repos

🟢 خلاصه مقاله:
گیت‌مال یک ابزار تولید صفحات استاتیک برای مخازن گیت است. همان‌طور که می‌دانید، GitHub امکان مرور مخزن، خواندن مستندات و کدها به صورت مرتب و ساختاری را فراهم می‌کند. گیت‌مال این قابلیت را به صورت یک نسخه استاتیک و قابل میزبانی در هر مکان دلخواه ارائه می‌دهد. این ایده بسیار کاربردی و جذاب است، زیرا می‌توان مخازن گیت را به صورت صفحات ثابت و بدون نیاز به سرور فعال، در وب سایت یا سرویس‌های مختلف منتشر کرد. در ادامه، می‌توانید نمونه زنده‌ای از این ابزار را مشاهده کنید.

#تولید_صفحات_استاتیک #مخازن_گیت #مستندسازی #وبسایت

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


👑 @gopher_academy
Forwarded from AI Labdon
فرصتی برای یادگیری؛
آندره کارپاتی به عنوان یکی 3-4 ابرنخبه در جهان که به ادراک سطح بالا از AI رسیده است در ویدئویی رایگان، مکانیسم ChatGPT را شرح می‌دهد.
10 ماه از انتشار این ویدیو گذشته است. اگر قرار باشد تا پایان سال 2025 فقط یک ویدیوی آموزشی تماشا کنید، همین است.
https://www.youtube.com/watch?v=7xTGNNLPyMI

| <Gratomic AI Bot/>
👾2
🔵 عنوان مقاله
Go Still Supports Building Non-Module Programs with GOPATH

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

در مقاله‌ی کریس سیبنمن، به چگونگی جلوگیری از بروز خطاهای گسسته و شکست‌های پراکنده در برنامه‌های Go اشاره شده است. او تأکید می‌کند که ساختن برنامه‌ها به گونه‌ای که خطاهای کوچک و جداگانه در آن‌ها به صورت دسته‌جمعی مدیریت شوند، می‌تواند پایداری و قابلیت اطمینان نرم‌افزار را به طور قابل توجهی افزایش دهد. این رویکرد به توسعه‌دهندگان کمک می‌کند تا برنامه‌های مقاوم‌تر و نگهداری‌پذیرتری ایجاد کنند.

همچنین، در مقاله ریدوان دلواهر، راهکارهایی برای محدود کردن دامنه شناسایی شناسه‌ها در زبان Go مورد بررسی قرار گرفته است. کاهش فضای اسامی و محدود کردن آن‌ها نه تنها از تداخل نام‌ها جلوگیری می‌کند، بلکه کد را خواناتر و نگهداری آن آسان‌تر می‌سازد. این رویکرد به خصوص در پروژه‌های بزرگ اهمیت زیادی دارد، زیرا باعث می‌شود فرآیند توسعه و اشکال‌زدایی ساده‌تر و مؤثرتر اجرا شود.

در مجموع، این تغییرات و راهکارها نشان می‌دهند که زبان Go در حال حرکت به سمت افزودن انعطاف‌پذیری و بهبود قابلیت استفاده است، در حالی که همچنان بر روی استحکام و سادگی تمرکز دارد.

#برنامه‌نویسی #گولنگ #توسعه_نرم‌افزار #مدیریت_کد

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


👑 @gopher_academy
🔵 عنوان مقاله
Open Policy Agent (OPA) 1.11

🟢 خلاصه مقاله:
نسخه ۱.۱۱ اوپن پالیسی آگنت (OPA) یکی از جدیدترین نسخه‌های این ابزار قدرتمند است که به عنوان یک موتور سیاست‌گذاری عمومی و چندمنظوره شناخته می‌شود. این نرم‌افزار، که اکنون از طرف بنیاد CNCF به عنوان یک پروژه فارغ‌التحصیل شده است، قابلیت‌های متعددی را برای سازمان‌ها فراهم می‌کند تا سیاست‌های امنیتی و عملیاتی خود را به صورت مرکزی و یکپارچه مدیریت کنند. با بهره‌گیری از OPA، می‌توان قواعد و قوانین مربوط به سیاست‌های مختلف را در زیرساخت‌های ابری، برنامه‌های کاربردی و سیستم‌های توزیع‌شده پیاده‌سازی و نظارت کرد. نسخه جدید بهبودهایی در کارایی و سهولت استفاده داشته است که آن را به ابزاری ضروری در حوزه مدیریت سیاست‌ها تبدیل کرده است.

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

در نتیجه، نسخه ۱.۱۱ OPA، با تایید رسمی از سوی CNCF و قابلیت‌های پیشرفته، جایگاه خود را به عنوان یک موتور سیاست‌گذاری عمومی و قدرتمند تثبیت کرده است. این ابزار، با تمرکز بر امنیت و انطباق، به سازمان‌ها کمک می‌کند تا سیاست‌های خود را به شکل مؤثر و سازگار پیاده‌سازی و نظارت کنند. آینده‌ی این پروژه نشان می‌دهد که OPA همچنان به توسعه و ارتقاء امکانات خود ادامه خواهد داد و نقش مهمی در پیشرفت فناوری‌های مرتبط با سیاست‌گذاری ایفا خواهد کرد.

#سیاست_گذاری #امنیت_اطلاعات #مقیاس‌پذیری #CNCF

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


👑 @gopher_academy
👍2
این دو مدل GMP و CSP از مهم‌ترین مفاهیم معماری Go هستن.

1) مدل GMP در Go چیست؟

🔥اGMP مخفف:

G → Goroutine
M → Machine (OS Thread)
P → Processor (Logical Processor in Go Runtime)

اGMP مدل زمان‌بندی (Scheduler) Go هست که تعیین می‌کنه goroutine ها چطور روی CPU اجرا بشن.

🔥 اجزای مدل GMP

G → Goroutine

کار یا فانکشنی که Go اجرا می‌کنه
خیلی سبک‌تر از Thread
ممکنه هزاران تا G داشته باشی

M → Machine (Thread)

یک OS thread واقعی
می‌تونه goroutine‌ها رو اجرا کنه
اGo سعی می‌کنه تعداد M زیاد نشه مگر لازم باشد

P → Processor

یک context برای اجرای goroutines
تعداد P ها = مقدار GOMAXPROCS
پیش‌فرض معمولاً برابر تعداد core های CPU

🔧 چطور کار می‌کنند؟
به زبان ساده:
اG → کاری که باید انجام شود P → توانایی اجرا (queue و context) M → نخ واقعی که کار را اجرا می‌کند

یا ساده‌تر:
اG روی M اجرا می‌شود، ولی فقط وقتی که M یک P داشته باشد.

🔥 چرا مهم است؟
برای فهم اینکه چرا Go درConcurrency خیلی سریع است

برای درک اینکه چرا goroutine ها هزینه بسیار کمی دارند

برای فهم مشکلاتی مثل:

goroutine leak
thread explosion
lock contention
work stealing

🔰 مثال تصویری ساده

P1: [G1, G2, G3] |
v M1 ---- CPU core 1
P2: [G4, G5] |
v M2 ---- CPU core 2


هر P یک صف goroutine دارد
اM کارها را از صف P برمی‌دارد و اجرا می‌کند.

🧠 رفتار مهم: Work Stealing
اگر P شلوغ باشد و P دیگر بیکار:

P1 steals tasks from P2

برای توزیع کار بین هسته‌ها.
⭐️ خلاصه مدل GMP

G = goroutine
M = OS thread
P = execution context

اP ها توزیع کار روی core ها را مدیریت می‌کنند
اM بدون P نمی‌تواند G اجرا کند
باعث افزایش performance + کاهش هزینه context switch می‌شود

2) مدل CSP در Go چیست؟

CSP = Communicating Sequential Processes

مدلی از هم‌زمانی (Concurrency) که Go از آن الهام گرفته.

ایده اصلی:
به جای اشتراک‌گذاری حافظه، از طریق channel ارتباط برقرار کن.


🔥 شعار معروف CSP:


Do not communicate by sharing memory.
Share memory by communicating.


⭐️ مفاهیم CSP در Go


1) Goroutine

یک خط اجرای مستقل

مثلاً:

go doSomething()

2) Channel

راه ارتباط goroutine ها:

ch := make(chan int) go func() { ch <- 10 }() value := <-ch

ایمن است
بدون lock
بدون race condition (اگر درست استفاده شود)

3) Synchronization through data

حتی پیام‌فرستی داخل channel خودش sync است.

🧩 مثال واقعی CSP

func main() { ch := make(chan string) go func() { ch <- "hello" }() msg := <-ch fmt.Println(msg) }

اgoroutine اول پیام را ارسال می‌کند
اgoroutine دوم پیام را دریافت می‌کند
بدون mutex
بدون lock
بدون conflict
🏆5
🔵 عنوان مقاله
Minimizing Identifier Scope in Go

🟢 خلاصه مقاله:
در برنامه‌نویسی با زبان Go، یکی از بهترین روش‌ها برای بهبود خوانایی و نگهداری کد، محدود کردن دامنه شناسه‌ها (identifier scope) است. با کاهش محدوده این شناسه‌ها، می‌توان از بروز خطاهای تصادفی و سردرگمی‌های کد جلوگیری کرد و ساختار برنامه را واضح‌تر و منسجم‌تر نگه داشت.

در مواردی که شناسه‌ها در بخش‌های مختلفی از برنامه استفاده می‌شوند، سعی کنید آن‌ها را در کوچک‌ترین و محدودترین بخش ممکن تعریف کنید. این کار نه تنها به جلوگیری از تداخل نام‌ها کمک می‌کند، بلکه توسعه‌دهندگان دیگر را قادر می‌سازد سریع‌تر مفهوم کد را درک کنند و تغییرات را به راحتی اعمال نمایند. استفاده هوشمندانه از محدود کردن دامنه شناسه‌ها، نقش مهمی در بهبود کیفیت و امنیت کد دارد.

در نهایت، رعایت این اصل ساده ولی مهم در برنامه‌نویسی با Go، توسعه را سریع‌تر و کد را قابل اعتمادتر می‌کند و باعث می‌شود برنامه‌ها قابل نگهداری و توسعه در آینده باشند.

#برنامه_نویسی #GO #بهبود_کد #توسعه_سریع

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


👑 @gopher_academy
🔵 عنوان مقاله
Getting Started with Go on the Nintendo 64

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

استفاده از EmbeddedGo برای هدف قرار دادن کنسول نینتندو ۶۴، نشان‌دهنده‌ی نوآوری و پیشرفت در حوزه برنامه‌نویسی کم‌نظیر است. این ابزار در واقع امکان توسعه نرم‌افزارهای جدید و اجرای آن‌ها را روی سخت‌افزارهای قدیمی که معمولاً قابلیت‌های محدودی دارند، فراهم می‌کند. نتیجه این است که می‌توانیم امکانات بیشتری را در دستگاه‌های قدیمی و کم‌قدرت بگنجانیم و کارهای جدیدی انجام دهیم که قبلاً غیرممکن به نظر می‌رسید.

این پروژه نه تنها برای توسعه‌دهندگان علاقه‌مند به حوزه های قدیمی و نوآورانه جالب است، بلکه نشان می‌دهد چالش‌های فنی و خلاقانه در زمینه نوآوری‌های سخت‌افزاری تا چه حد می‌تواند الهام‌بخش باشد. آزمایش و توسعه برنامه‌های بر روی نینتندو ۶۴ با زبان گو، یک نمونه عالی از این است که چگونه فناوری‌های قدیمی مجدداً به زندگی بازمی‌گردند و فرصت‌های جدید را فراهم می‌کنند.

#برنامه‌نویسی_قدیمی #توسعه_درون_حوزه_سخت‌افزار #نفوذ_در_کنسول‌ها #نوآوری_در_نرم‌افزار

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


👑 @gopher_academy
1
🔵 عنوان مقاله
porting the TypeScript compiler to Go

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

این اقدام می‌تواند تاثیر زیادی در کاهش زمان توسعه و افزایش کارایی پروژه‌های مختلف داشته باشد. انتقال کامپایلر به زبان Go نه تنها امکانات جدیدی را برای بهبود سرعت فراهم می‌کند، بلکه مزایای فنی دیگری مانند سادگی در نگهداری و توسعه بیشتر را ارائه می‌دهد. در نتیجه، انتظار می‌رود که این پروژه در آینده نزدیک، تغییرات قابل‌توجهی در محیط توسعه جا بیندازد و بهره‌وری بیشتری را برای برنامه‌نویسان به ارمغان آورد.

#TypeScript #برنامه_نویسی #پروژه_بازنویسی #توسعه

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


👑 @gopher_academy
👍2
🔵 عنوان مقاله
go-size-analyzer: Analyze the Size of Dependencies in Compiled Go Binaries

🟢 خلاصه مقاله:
ابزار go-size-analyzer امکان تحلیل اندازه وابستگی‌ها در باینری‌های کامپایل شده زبان Go را فراهم می‌کند. این ابزار از فرمت‌های مختلفی مانند ELF، Mach-O، PE و حتی WebAssembly پشتیبانی می‌کند، و به شما اجازه می‌دهد تا تجزیه و تحلیل دقیقی از سایز فایل‌ها به تفکیک بسته‌ها و بخش‌های داخلی آن‌ها داشته باشید. این ویژگی به توسعه‌دهندگان کمک می‌کند تا بفهمند هر بخش از فایل‌های باینری چه میزان فضا اشغال کرده و آیا بخش‌هایی وجود دارند که می‌توان بهینه‌سازی شوند یا نه.

علاوه بر این، نسخه‌ای آنلاین از این ابزار در دسترس است که در آزمایش‌های من بسیار سریع عمل کرد. با استفاده از این نسخه، می‌توانید تحلیل‌های مورد نیاز را بدون نیاز به نصب نرم‌افزار انجام دهید و در کوتاه‌ترین زمان نتیجه‌گیری کنید. این ابزار برای توسعه‌دهندگان و تیم‌های فنی که به دنبال درک بهتر از اندازه و ساختار باینری‌های خود هستند، یک گزینه بسیار کاربردی محسوب می‌شود.

#تحلیل_باینری #واپستگی_در_حفاظت #بهینه‌سازی_کد #برنامه‌نویسی

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


👑 @gopher_academy
👍1
🔵 عنوان مقاله
Gremlins: A Mutation Testing Tool for Small Go Modules

🟢 خلاصه مقاله:
گِرمیلینز: ابزاری برای تست جهش در ماژول‌های کوچک زبان Go

در دنیای توسعه نرم‌افزار، تست‌های واحد یکی از مهم‌ترین روش‌ها برای اطمینان از صحت کد است. ابزار "گِرمیلینز" روشی متفاوت و نوآورانه برای ارزیابی کیفیت این تست‌ها ارائه می‌دهد. این ابزار با وارد کردن اختلالاتی کوچک در کد و در کنار آن، تغییراتی در کدهای مرتبط، فرآیندی شبیه به استرس تست را انجام می‌کند. هدف این است که بررسی کند آیا تست‌ها قادرند تغییرات ناگهانی و احتمالی را شناسایی و نمره دهند؛ یعنی چقدر از صحت و استحکام آن‌ها محافظت می‌کنند. هرچقدر این تغییرات بیشتر باشد، نشان‌دهنده ضعف در مجموعه تست‌ها و نیاز به اصلاح است.

با توجه به اینکه گِرمیلینز در مراحل اولیه توسعه قرار دارد، اما به دلایل زیادی ارزش بررسی دارد. اولین و جذاب‌ترین آن لوگوی بسیار خلاقانه و جالب آن است که می‌تواند توجه هر برنامه‌نویس و توسعه‌دهنده‌ای را جلب کند. این پروژه روی پلتفرم GitHub قرار دارد و امکان استفاده و بررسی آن برای همگان آزاد است، بنابراین پیشنهاد می‌شود به جمع کاربران آن بپیوندید و از امکانات آن بهره‌مند شوید.

کلیتی از نوآوری در تست‌های نرم‌افزاری و ابزارهای توسعه، گِرمیلینز سعی می‌کند فرآیند تضمین کیفیت کدهای کوچک در زبان Go را ساده‌تر و موثرتر کند. در آینده، با توسعه و بهبود این ابزار، احتمالا شاهد استانداردهای بالاتر در تست‌نویسی و کاهش خطاهای نرم‌افزاری خواهیم بود.

#تست_جهش #ابزار_نرم_افزار #GoLang #توسعه_نرم‌افزار

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


👑 @gopher_academy
1
🔵 عنوان مقاله
reflects on 12 years of building Ebitengine

🟢 خلاصه مقاله:
در این مقاله، به بررسی دوازده سال تلاش و توسعه‌ی موتور بازی‌سازی Ebitengine پرداخته شده است. نویسنده به تصمیمات، چالش‌ها و دستاوردهای مهمی که در طول این سال‌ها داشته‌اند، اشاره می‌کند و نشان می‌دهد چگونه این پروژه رشد کرده و به‌روز شده است تا نیازهای توسعه‌دهندگان بازی را برآورده کند.

همچنین، تعدادی از بازی‌هایی که با بهره‌گیری از Ebitengine در سال ۲۰۲۵ منتشر شده‌اند، معرفی می‌شوند. این بازی‌ها نمونه‌هایی از توانایی‌های فنی و خلاقیت‌های توسعه‌دهندگان هستند و نشان می‌دهند که چگونه Ebitengine به عنوان یک ابزار قدرتمند، روند ساخت بازی‌های متنوع را تسهیل کرده است.

نویسنده در ادامه، برنامه‌های آینده و توسعه‌های بعدی برای Ebitengine را پیش‌رو می‌گذارد. اهدافی مانند بهبود عملکرد، افزودن امکانات جدید و تسهیل تجربه توسعه‌دهندگان، در فازهای توسعه آینده قرار دارند. این چشم‌اندازها نشان از تعهد تیم توسعه دهنده به ارتقاء مداوم و حفظ جایگاه این موتور در صنعت بازی‌سازی دارد.

#بازی_سازی #Ebitengine #توسعه_بازی #کد_باز

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


👑 @gopher_academy
1🔥1
شما نتفلیکس نیستید! پس چرا از روز اول با پیچیدگی میکروسرویس‌ها خودکشی می‌کنید؟

صنعت نرم‌افزار در حال یک بازگشت عقلانی به سمت معماری‌های یکپارچه مدرن (Modular Monolith) است. جایی که یاد می‌گیریم معماری کد (Logical) باید از معماری استقرار (Physical) کاملا جدا باشه.

در اولین مقاله‌ام در ویرگول، با کالبدشکافی پروژه اپن‌سورس Quick Connect، معماری Code-Level Monolith رو معرفی کردم. معماری‌ای که حلقه گمشده بین سادگی و مقیاس‌پذیریه.

در این معماری:
۱. امروز: با سرعت بالا و هزینه کم به صورت یکپارچه دپلوی می‌کنید
۲. فردا: بدون بازنویسی کد و فقط با تغییر کانفیگ، ماژول‌های پرفشار رو جدا کرده و میکروسرویس می‌کنید (مثل Grafana Loki).

با این رویکرد، یکبار برای همیشه پرونده جنگ مونولیت علیه میکروسرویس رو ببندید!

مطالعه کامل مقاله (فارسی و انگلیسی):

ویرگول:
https://virgool.io/@alirezafeyze44/code-level-monolith-art-flexible-deployment-yad18surpcil

Dev.to:
https://dev.to/alireza_feizi_2aa9c86cac4/code-level-monolith-the-hybrid-architecture-the-art-of-flexible-deployment-2jm2

| <Alireza Feizi/>

👉 https://t.iss.one/addlist/AJ7rh2IzIh02NTI0
🔥5👍32
🔵 عنوان مقاله
Kaiju Engine: A 2D and 3D Game Engine in Go

🟢 خلاصه مقاله:
موتور بازی Kaiju Engine، یک پروژه در دست توسعه است که با هدف ساخت یک موتور بازی در زبان برنامه‌نویسی Go طراحی شده است. این موتور بر پایه فناوری Vulkan فعالیت می‌کند و قصد دارد در آینده امکانات قدرتمندی را برای توسعه بازی‌های دو بعدی و سه‌بعدی فراهم کند. در حال حاضر، این پروژه در مراحل اولیه توسعه قرار دارد و هنوز در حال شکل‌گیری و آزمایش است.

با توجه به پیشرفت‌های اولیه، توسعه‌دهندگان بر روی پیاده‌سازی قابلیت‌های پایه و زیرساخت‌های لازم برای پشتیبانی از بازی‌های چندبعدی کار می‌کنند. هدف نهایی این است که یک موتور سبک و قدرتمند باشد که توسعه‌دهندگان بتوانند با آن بازی‌های پیشرفته و قابل اجرا در پلتفرم‌های مختلف بسازند.

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

#موتور_بازی #بازی_سازی #Vulkan #برنامه‌نویسی

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


👑 @gopher_academy
2
🎙️ عنوان پادکست:
🪿 Goose noose? 🤘 Excellent! 🎸
خلاصه پادکست:
Conference videos🇬🇧 GopherCon UKFyneConfProposals💧 Accepted: add new goroutine leak profile as a GOEXPERIMENTFull discussion of this feature in Episode 127🪿 Added to minutes: add GOOS=noos bare metal support🫣 Added to minutes: Add bytes.Buffer.Peek👍 Added to minutes: Add must.DoBlog posts✈️ Go blog: Flight Recorder in Go 1.25 by Carlos Amedee and Michael Knyszek🫖 We tried Go's experimental Green Tea garbage collector and it didn't help performance by Zach Musgravedo v2.0...
👍1
🚀 پروژه چت Real-Time با Go منتشر شد!

۱۰۰K کاربر همزمان
۸۰۰۰ پیام/ثانیه
WebSocket + MessagePack
PostgreSQL Replication
RabbitMQ Cluster
Redis + S3
Docker Ready
کاملاً Open Source

🔗 GitHub
👉 https://github.com/mehdi124/chat-service

📝 Medium
👉 https://mehdi124.medium.com/building-a-scalable-real-time-chat-service-in-go-1f4cbee48b2a


⭐️ Star یادتون نره!

#golang #opensource #chat #websocket


👑 @gopher_academy
🔥51👍1🏆1🍾1👾1
Gopher Academy
توضیحات👇👇👇👇 👑 @gopher_academy
این تصویر ساختار کامل درخت radix tree در مدیریت حافظه‌ی Go روی معماری linux/amd64 را نشان می‌دهد — همان جایی که allocator از خلاصه‌ها (*summaries*) برای دنبال‌کردن وضعیت صفحات حافظه استفاده می‌کند.


🌐 فضای آدرس مجازی

در معماری x86-64 (amd64)**، فضای آدرس مجازی برابر است با:

> 2⁴⁸ بایت = 256 ترابایت

این یعنی Go می‌تواند آدرس‌های حافظه را از ۰ تا 256TB در محدوده‌ی مجازی نگاشت کند.

🌳 ساختار درخت Radix

در این معماری، درخت **۵ سطح دارد (از Level 0 تا Level 4).

* سطح 0 تا 3: نودهای داخلی هستند که از ادغام ۸ فرزندشان تشکیل می‌شوند.
* سطح 4: برگ‌ها (leaf nodes) هستند که هرکدام یک bitmap شامل 512 صفحه را خلاصه می‌کنند.

هر صفحه (page) در Go برابر است با 8KB.

📦 اندازه‌ی خلاصه‌ها (Summaries)

هر نود خلاصه‌ای از نوع (start, max, end) نگه می‌دارد:

* start: تعداد صفحات آزاد از ابتدای بخش
* end: تعداد صفحات آزاد از انتهای بخش
* max: طول بزرگ‌ترین بخش آزاد در میانه‌ی آن

این سه مقدار به Go اجازه می‌دهد به سرعت بفهمد در هر بخش از حافظه چند صفحه‌ی پیوسته‌ی آزاد وجود دارد.


⚙️ نکته‌ی مهم:

این مقادیر نشان‌دهنده‌ی حداکثر اندازه‌ی ساختار درخت هستند.
در عمل، درخت به‌صورت تدریجی رشد می‌کند — یعنی فقط بخش‌هایی از حافظه که واقعاً مورد استفاده قرار گرفته‌اند، وارد ساختار درخت می‌شوند.

👑 @gopher_academy
👍1🐳1🏆1