Category

Go Programming

Go language tutorials, patterns, and best practices

64 posts

ساخت یک محدودکننده نرخ سطل توکن با عملکرد بالا در Go

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

تسلط بر بسته Context در Go: یک بررسی عمیق

در تکامل زبان Go، بسته‌ای به اهمیت و در عین حال سوءتفاهم‌برانگیزی Context وجود نداشته است. از زمان معرفی آن در نسخه ۱.۷، این بسته به مکانیسم استاندارد برای حمل مهلت‌ها، سیگنال‌های لغو و مقادیر محدود به درخواست در سراسر مرزهای API تبدیل شده است. برای توسعه‌دهندگان متوسط تا پیشرفته، عبور از استفاده‌های پایه‌ای برای نوشتن برنامه‌های همزمان مقاوم، قابل نگهداری و مقیاس‌پذیر ضروری است.

ساخت یک حافظه پنهان LRU ایمن برای رشته‌ها در Go: الگوهای همزمانی و مقایسه عملکرد با sync.Map

همزمانی یکی از نقاط قوت اصلی Go است، اما مدیریت وضعیت مشترک را پیچیده می‌کند. یکی از نیازهای رایج در برنامه‌های Go با عملکرد بالا، یک حافظه پنهان درون‌حافظه‌ای با سیاست حذف LRU (کمترین استفاده اخیر) است. اگرچه کتابخانه استاندارد Go sync.Map را برای ذخایر کلید-مقدار همزمان ارائه می‌دهد، اما برای بارهای کاری کش بهینه‌سازی نشده است.

تسلط بر محدودیت نرخ با تراکم بالا در Go: پیاده‌سازی سطل توکن

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

ساخت سرویس‌های مقاوم در گو: تسلط بر مکانیسم‌های تلاش مجدد و مدارشکن

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

غلبه بر قدرت و ایمنی: مثال‌های عملی از جنریک‌های Go برای توسعه مدرن

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

جنریک‌های Go در عمل: مثال‌های کاربردی برای مارشالینگ JSON و ابزارهای سفارشی اسلایس

از زمان انتشار Go 1.18، زبان برنامه‌نویسی Go با معرفی پارامترهای نوع، که به طور رایج «جنریک» نامیده می‌شوند، تحول چشمگیری را تجربه کرده است. برای سال‌ها، توسعه‌دهندگان Go برای دستیابی به انعطاف‌پذیری نوع به interface{} (اینترفیس‌های خالی) و ریفکشن تکیه می‌کردند که اغلب به قیمت ایمنی در زمان کامپایل و عملکرد تمام می‌شد. جنریک‌ها بالاخره راهی را فراهم کردند تا کد قابل استفاده مجدد و ایمن از نظر نوع نوشته شود...