Gopher Academy
3.34K subscribers
920 photos
40 videos
280 files
2.01K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
Ebitengine v2.8.0: The Go 2D Game Engine

🟢 خلاصه مقاله:
مقاله‌ای که مورد بررسی قرار گرفته است به پروژه‌ی «اِبیت‌انجین» در اکوسیستم زبان برنامه‌نویسی گو اختصاص دارد. این پروژه به‌عنوان یکی از پروژه‌های محبوب در این حوزه شناخته شده است. در جدیدترین به‌روزرسانی‌ها، ابیت‌انجین پشتیبانی از فرمت صوتی 32 بیتی با فرمت فلوت و همچنین بهبودهایی در سفارشی‌سازی شیدر (shader) را به ارمغان آورده است. این امکانات جدید به توسعه‌دهندگان اجازه می‌دهد تا با دقت بیشتری بر روی جزئیات صوتی کار کنند و تجربه‌های بصری پیشرفته‌تری را ارائه دهند. به‌طور کلی، این پیشرفت‌ها نشان‌دهنده‌ی تعهد ابیت‌انجین به پیشرفت مداوم و ارائه‌ی قابلیت‌های جدید است که می‌تواند به افزایش کارایی و جذابیت این موتور بازی در بین توسعه‌دهندگان کمک کند.

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


👑 @gopher_academy
👍1
نکته خیلی جالبش شاید استفاده از GOMEMLIMIT بصورت dynamic هست که در runtime ست میشه..

Go Beyond: Building Performant and Reliable Golang Applications

https://blog.zomato.com/go-beyond-building-performant-and-reliable-golang-applications

✍️حسین نظری

#performance
#golang
#گولنگ


👑 @gopher_academy
💋1
🔵 عنوان مقاله
Some Go Web Dev Notes

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

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


👑 @gopher_academy
👍2
🔵 عنوان مقاله
Joining Errors in Go

🟢 خلاصه مقاله:
مقاله مورد نظر به بررسی دو رویکرد در زبان برنامه‌نویسی Go می‌پردازد: استفاده از چندین %ws و استفاده از دستور errors.Join که در نسخه 1.20 زبان Go معرفی شده است. رویکرد اول، %ws، از دستورهای فرمت‌بندی متنی برای ایجاد نتیجه‌ای استاندارد و یکپارچه استفاده می‌کند. این رویکرد به برنامه‌نویس اجازه می‌دهد که خروجی‌ها و پیام‌ها را به شکل واضح و دقیق نمایش دهد، خصوصاً در محیط‌هایی که نیاز به ترکیب و نمایش چندین مقدار متفاوت است. رویکرد دوم، errors.Join، امکان مدیریت و ترکیب چندین خطا را در یک پیغام خطا الحاقی فراهم می‌کند که بسیار مفید است برای دسته‌بندی خطاها و واکنش‌های مرتبط با آن‌ها. این امکان به برنامه‌نویس کمک می‌کند تا خطاهای متعدد را به شکل مؤثری دریابد و رفع کند، و در نهایت به بهبود خوانایی و قابلیت نگهداری کد کمک می‌کند.


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


👑 @gopher_academy
5
💋2
🔵 عنوان مقاله
Prep: Compile-Time Function Evaluation for Go

🟢 خلاصه مقاله:
مقاله مورد بحث به بررسی ویژگی prep.Comptime پرداخته است که امکان ارزیابی توابع در زمان ساخت را فراهم می‌کند و نتیجه محاسبه شده را جایگزین توابع می‌نماید. این ویژگی شباهت‌هایی به comptime در زبان برنامه‌نویسی Zig دارد اما تفاوت‌هایی نیز با آن دارد. مقاله اذعان می‌کند که استفاده از این تکنیک ممکن است به نوعی "کفران" تلقی شود، اما نکته جالبی است که نمی‌توان انکار کرد. با این حال، این ویژگی محدودیت‌هایی دارد و ابزار toolexec اصولاً برای بازنویسی متن مبدأ به صورت دلخواه طراحی نشده است. این مقاله به بررسی ایده‌ای نو و جذاب پرداخته است اما همچنین به محدودیت‌ها و چالش‌هایی که ممکن است در استفاده از این تکنیک وجود داشته باشد، اشاره می‌کند. بنابراین، ضروری است که توسعه‌دهندگان قبل از استفاده از این ویژگی به طور دقیق به این محدودیت‌ها و چالش‌ها توجه کنند.

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


👑 @gopher_academy
🔵 عنوان مقاله
📉 A Guide to the Go Garbage Collector

🟢 خلاصه مقاله:
مقاله‌ای که به بررسی سیستم جمع‌آوری زباله (Garbage Collection) در زبان برنامه‌نویسی Go می‌پردازد، از نسخه 1.19 این زبان شروع شده است و به‌عنوان یک مستند زنده عرضه شده که توضیحات دقیق و جامعی درباره‌ی نحوه‌ی عملکرد این سیستم ارائه می‌دهد. مقاله همراه با دیاگرام‌های تعاملی مفید است که به درک بهتر و دقیق‌تر عملکرد سیستم جمع‌آوری زباله در Go کمک می‌کند. این مستند به عنوان منبعی ارزشمند برای توسعه‌دهندگانی که به دنبال فهم عمیق‌تری از مکانیزم‌های داخلی و بهینه‌سازی عملکرد برنامه‌های خود در Go هستند، محسوب می‌شود.

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


👑 @gopher_academy
👍3
🔵 عنوان مقاله
Gowitness: A Web Screenshot Utility using Chrome Headless

🟢 خلاصه مقاله:
مقاله‌ای که مورد بررسی قرار گرفته به بررسی ابزاری به نام "وب‌سایت اسکرین‌شات" می‌پردازد که با استفاده از زبان برنامه‌نویسی Go نوشته شده است. این ابزار از Chrome Headless برای تولید اسکرین‌شات‌هایی از رابط‌های وب استفاده می‌کند و عملیات خود را از طریق خط فرمان اجرا می‌کند. عملکرد اصلی این ابزار در تولید تصاویری دقیق از صفحات وب است که برای توسعه‌دهندگان وب و تیم‌های QA که به تست و بررسی ظاهر و کارکرد وب‌سایت‌ها در محیط‌های مختلف می‌پردازند، بسیار مفید است. استفاده از Chrome Headless به این معنی است که اسکرین‌شات‌ها را می‌توان بدون نیاز به نمایش فیزیکی مرورگر و در حین اجرای اسکریپت‌های پس‌زمینه و دیگر فعالیت‌های مبرم مرورگر تهیه کرد، که این امکان افزایش کارایی و بهره‌وری را فراهم می‌کند.

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


👑 @gopher_academy
👍31🔥1
🔵 عنوان مقاله
anthropic-claude-golang-sdk: Go Library for Anthropic's Claude API

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

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


👑 @gopher_academy
👍2
🔵 عنوان مقاله
Olric: Distributed Cache and Key/Value Store

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

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


👑 @gopher_academy
👍2
🔵 عنوان مقاله
Reflecting on Go Reflection

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



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


👑 @gopher_academy
💯2
🔵 عنوان مقاله
sync.Map: The Right Tool for the Right Job

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

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


👑 @gopher_academy
🔵 عنوان مقاله
Elevate Your Backend Skills

🟢 خلاصه مقاله:
مقاله به بررسی اهمیت آموزش و توسعه مهارت‌ها در زمینه‌های مختلف برنامه‌نویسی نظیر Python، Go، TypeScript و همچنین آشنایی با پلتفرم‌هایی مانند AWS می‌پردازد. این مقاله تأکید دارد که با استفاده از دوره‌های آموزشی ویدیویی که توسط متخصصین این حوزه‌ها ارائه می‌شود، افراد می‌توانند به طرز چشمگیری دانش و تخصص خود را گسترش دهند. همچنین، اشاره می‌کند به فرصت‌های یادگیری متنوع از طریق مسیرهای یادگیری مختلف که به طور مداوم در حال ارتقا هستند و به شرکت‌کنندگان این امکان را می‌دهد که مهارت‌های مورد نیاز در بازار کار را به دست آورند. این مقاله تاکید می‌کند که توسعه مهارت‌های برنامه‌نویسی در درازمدت می‌تواند به بهبود فرصت‌های شغلی و پیشرفت کاری کمک کند.

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


👑 @gopher_academy
4
🔵 عنوان مقاله
I'm Glad I Did It in Go

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

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


👑 @gopher_academy
🌟هفت آبان روز بزرگذاشت پدر ایران
🌟افتخار ایران و بشریت

🍻#CYRUS_THE_GREAT

👑#کوروش_بزرگ

🕊کوروش بیا که اینجا فرمانده ای نداریم
🕊فرمان بده درفشی از کاویان فرازیم

🕊ما جز قلم نداریم تیغی که صلح آریم
🕊با شعرِ آریایی روحُ روان نوازیم


🍻 به مناسبت این روز تخفیف ۵۰ درصدی روی تعرفه های تبلیغی کانال
🔵فقط 8 و 7 آبان تخفیف ۵۰ درصدی داریم

برای هماهنگی تبلیغات پیام بدید👇
@labdon_ads

👑 @gopher_academy
9❤‍🔥3🎉1😍1👨‍💻1
🔵 عنوان مقاله
Distributed Transactions in Go: Read Before You Try

🟢 خلاصه مقاله:
این مقاله به بررسی و توضیح روش‌های مدیریت تراکنش‌ها در معماری‌های مبتنی بر خدمات می‌پردازد، جایی که این تراکنش‌ها نیاز به پردازش در بیش از یک سرویس دارند. به‌طور خاص، مقاله تمرکز خود را بر روی چالش‌ها و راهکارهای مدیریت و اطمینان از کنسیستنسی داده‌ها در سیستم‌های توزیع‌شده قرار می‌دهد. اول از همه، مقاله مفاهیم پایه‌ای تراکنش و خصوصیات ACID (atomicity, consistency, isolation, durability) را معرفی می‌کند. سپس، به بررسی مدل‌های مختلف تراکنش‌ها مثل 2PC (Two-Phase Commit) و سایر مدل‌های فراگیر تنظیم تراکنش مانند SAGA می‌پردازد. مقاله نیز رهیافت‌های جدید مانند تراکنش‌های طولانی-عمر (Long-running Transactions) و تکنیک‌های بازیابی معاصر را بررسی کرده و تأثیر آن‌ها بر روی مقیاس‌پذیری و دوام سیستم‌ها را تحلیل می‌کند. در نهایت، مقاله توصیه‌ها و بهترین روش‌ها برای طراحی سیستم‌های مقاوم در برابر خطا را ارائه می‌دهد، تاکید بر پیاده‌سازی استراتژی‌هایی که به حفظ تمامیت داده کمک کند.

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


👑 @gopher_academy
1
Forwarded from Bardia & Erfan
طلایی ترین لیست وبلاگ‌ها برنامه نویسان شرکت‌های بزرگ دنیا مثل Google و . . .
در این لیست افرادی که تجربه کار کردن در شرکت‌های بزرگ دارند اسم و لینکشون آورده شده

نفراول :
برنامه نویس شرکت TripAdvisor
هم مقالات فنی و هم مهارت نرم رو پوشش میده
https://dandreamsofcoding.com/

نفر دوم :
خالق الگوریتمی که در تمامی سیستم های recommender در شرکت بزرگ ازش استفاده میشه
https://lemire.me/blog/

نفر سوم :
از ایشون مگه بالاتر داریم ؟ CEO شرکت Stack overflow
https://www.joelonsoftware.com/

نفر چهارم :
مهندس نرمافزار گوگل و خالق چند تا از بزرگترین پروژه‌های Open Source جهان
https://latedev.wordpress.com/

نفر پنجم :
یک از تاثیر گذاران محبوبیت Linux
https://www.linux.org/forums/

نفر ششم :
برنامه نویس Google و نوسینده چند کتاب مشهور در دنیا
https://www.jeremykun.com/

نفر هفتم :
خالق Viaweb نوسینده بزرگ در حیطه برنامه نویسی
https://paulgraham.com/articles.html

نفر هقتم :
متخصص و Director شرکت Huawei
https://www.yegor256.com/

نفر هشتم :
یک متخصص به تمام معنا
https://prog21.dadgum.com/

نفر نهم :
نوسینده کتاب Clean Code
https://blog.cleancoder.com/

نفرم دهم :
مهندس گوگل
https://stevehanov.ca/blog/

نفرم یازدهم :
مهندس شرکت Uber
https://blog.pragmaticengineer.com/


👑 @labdon_academy
3💘1
🔵 عنوان مقاله
Using Go Embed

🟢 خلاصه مقاله:
مقاله توجه را به قابلیت مهمی در زبان برنامه‌نویسی Go با نام `go:embed` معطوف می‌کند که از نسخه 1.16 موجود است. این دستورالعمل امکان ضمیمه کردن فایل‌های استاتیک و حتی پوشه‌های کامل را درون باینری‌ها فراهم می‌کند. به جای ذخیره‌سازی فایل‌ها و دایرکتوری‌های مورد نیاز برنامه به صورت جداگانه، `go:embed` این امکان را می‌دهد که محتویات مورد نظر را مستقیماً درون ساختار (`struct`) خود برنامه ضمیمه کنید.

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

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


👑 @gopher_academy
4
✍️Amir NiloofariAmir Niloofari

آشنایی با Garbage Collector در Go
: مدیریت حافظه کارآمد برای نرم‌افزار‌ها با کارایی بالا - قسمت ۱
همانطور که در پست قبل اشاره شد یکی از تمایزهای کلیدی Go، جمع آوری زباله همزمان(Concurrent Garbage collector) آن است که به طور هدفمند برای محیط های ابری و سرور‌های مدرن ساخته شده است.
با Go، توسعه‌دهندگان می‌توانند برنامه‌هایی با کارایی بالا بسازند و در عین حال مدیریت حافظه را به یک جمع‌آوری زباله بسیار بهینه و کم تأخیر بسپارند.
در این پست قرار است نگاهی عمیق‌تر به دلیل متمایز شدن Go’s GC و نحوه عملکرد آن بیندازیم:

- الگوریتم Mark-and-Sweep همزمان:
Go از فرآیند جمع‌آوری زباله Mark-and-Sweep استفاده می‌کند که همزمان با برنامه اجرا می‌شود. در مرحله Mark، لایو آبجکت‌ها (آبجکتی که حداقل یک مرجع به آن وجود دارد) شناسایی و علامت گذاری می شوند. سپس در مرحله Sweep حافظه را برای آبجکت‌هایی که دیگر به آنها ارجاع داده نمی شود اختصاص می دهد. زیبایی این فرآیند این است که به موازات اجرای برنامه اتفاق می‌افتد که برای ساخت برنامه‌های حساس به عملکرد مانند سرورهای وب یا سیستم‌های توزیع شده که در آن وقفه‌ها می‌توانند مستقیماً بر تاخیر (latency) تاثیر بگذارند، بسیار مهم است.

- تأخیر کم:
GC Go برای سناریوهای Low latency بهینه شده است که این برای برنامه هایی که نیاز به زمان پاسخ سریع دارند، مانند سیستم های بلادرنگ یا API هایی که حجم زیادی از ترافیک را مدیریت می کنند، ایده آل است. جمع‌آوری زباله به گونه‌ای طراحی شده است که مکث‌ها را به حداقل می‌رساند و حجم کاری خود را در چندین هسته CPU توزیع می‌کند و عملکرد برنامه را صاف و بدون وقفه نگه می‌دارد.

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

- نوشتن موانع برای اصلاحات حافظه ایمن:
Go در مرحله علامت‌گذاری از write barriers استفاده می‌کند تا هنگام تغییر آبجکت‌ها در حافظه، دقت را حفظ کند.
این موانع به‌عنوان نقاط بازرسی عمل می‌کنند و اطمینان می‌دهند که جمع‌آورنده زباله از تغییرات در ارجاعات آبجکت‌ها حتی زمانی که برنامه هنوز در حال اجرا است، آگاه است.
این مکانیسم از Memory corruption جلوگیری می کند (هنگامی که محتویات یک مکان حافظه به دلیل رفتار برنامه‌ای که از قصد برنامه‌نویس اصلی یا سازه‌های برنامه/زبان فراتر می‌رود، تغییر می‌کند.) و تضمین می کند که آبجکت‌ها زنده به اشتباه جابجا نمی شوند و کل سیستم را انعطاف پذیرتر و پاسخگوتر می کند.

👑 @gopher_academy
🙏1💘1
Gopher Academy
✍️Amir NiloofariAmir Niloofari آشنایی با Garbage Collector در Go : مدیریت حافظه کارآمد برای نرم‌افزار‌ها با کارایی بالا - قسمت ۱ همانطور که در پست قبل اشاره شد یکی از تمایزهای کلیدی Go، جمع آوری زباله همزمان(Concurrent Garbage collector) آن است که به طور…
آشنایی با Garbage Collector در Go: مدیریت حافظه کارآمد برای نرم‌افزار‌ها با کارایی بالا - قسمت ۲

میتوانید قسمت ۱ را در پست قبلی مطالعه کنید. ادامه:
- جمع آوری زباله قابل تنظیم:
یکی از ویژگی های برجسته Go، جمع آوری زباله قابل تنظیم آن است. توسعه‌دهندگان می‌توانند فرکانس GC را با استفاده از متغیر محیطی «GOGC» تنظیم کنند، که تعداد دفعات کار جمع‌آور زباله را نسبت به رشد پشته کنترل می‌کند.
مقدار پیش فرض 100 است، به این معنی که GC پس از دو برابر شدن اندازه پشته فعال می شود. افزایش مقدار «GOGC» فرکانس جمع‌آوری زباله را کاهش می‌دهد، مصرف حافظه را با وقفه‌های کمتر عوض می‌کند، در حالی که کاهش آن باعث می‌شود GC بیشتر اجرا شود و کنترل دقیق‌تری بر استفاده از حافظه تضمین می‌کند.

export GOGC=200 // رشد پشته را افزایش می دهد و باعث می شود GC کمتر اجرا شود

- Escape Analysis برای تخصیص پشته در مقابل هیپ:
کامپایلر Go از تحلیل گریز استفاده می‌کند، که تعیین می‌کند متغیرها می‌توانند در کدام ساختار داده stack یا heap تخصیص داده شوند. متغیرهایی که از محدوده خود "فرار" نمی کنند (مانند متغیرهای محلی در یک تابع) به صورت پشته ای تخصیص داده می شوند که سریعتر است و از جمع آوری زباله به طور کلی جلوگیری می کند. از سوی دیگر، تخصیص هیپ توسط جمع کننده زباله ردیابی می شود و تحلیل فرار استفاده غیر ضروری از هیپ را به حداقل می رساند و مدیریت حافظه را برای بسیاری از برنامه ها بهینه می کند.

- Profiling and Monitoring عملکرد GC:
Go ابزارهای قوی برای نظارت و بهینه سازی عملکرد GC فراهم می کند. بسته «زمان اجرا» به توسعه دهندگان اجازه می دهد تا آمار دقیق GC را ردیابی کنند، در حالی که "pprof" پروفایل CPU و حافظه را برای شناسایی و رفع تنگناهای عملکرد ارائه می دهد. این به ویژه برای برنامه‌هایی با تنظیمات دقیق که نیاز به کار در مقیاس یا زیر بار سنگین دارند، ارزشمند است و این امکان را می‌دهد الگوهای استفاده از حافظه را مشخص کرد و رفتار برنامه را بهینه نمود.

- کارایی حافظه در Go:
ترکیبی از جمع‌آوری همزمان زباله، Escape Analysis و موانع نوشتن تضمین می‌کند که Go در مدیریت حافظه بسیار کارآمد است، و آن را به یک انتخاب قدرتمند برای سیستم‌های بک‌اند، میکروسرویس‌ها و سرورهای با توان بالا تبدیل می‌کند.
چه در حال ساخت یک برنامه بومی ابری یا یک API با کارایی بالا باشید، GC به شما آرامش می دهد که مدیریت حافظه بدون نیاز به مداخله دستی بهینه شده است.

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


👑 @gopher_academy
🔥1💯1