Gopher Academy
3.87K subscribers
927 photos
40 videos
280 files
2.09K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🎙️ عنوان پادکست:
🛠️ Can we fix it? No we can't! 🧭 Plus, exclusive behind-the-scenes look at Go West Conf.
خلاصه پادکست:
این شماره با نگاهی طنزآمیز به «Can we fix it? No we can't!» به بحث‌های روز دنیای Go می‌پردازد و پشت‌صحنه‌ای از Go West Conf را هم روایت می‌کند. در بخش ابزارها، نسخه v0.48.0 از vscode-go با پشتیبانی از golangci-lint v2 منتشر شده و در کنار آن یک معرفی تخصصی و گفت‌وگو با Ldez در قسمت 104 ارائه شده است. گزارش یک باگ در LookPath درباره گسترش نادرست "" و "." در برخی تنظیمات PATH و همچنین پیشنهادی برای حذف کامل قابلیت‌های cmd/fix مطرح شده است....
2🐳1👨‍💻1
🔵 عنوان مقاله
Flight Recorder in Go 1.25

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

#Go #Go125 #FlightRecorder #Tracing #Diagnostics #Observability #ProductionDebugging #Profiling

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


👑 @gopher_academy
👍1
🔵 عنوان مقاله
PegoMock 4.3: A Powerful Yet Simple Mocking Framework

🟢 خلاصه مقاله:
**PegoMock 4.3 یک فریمورک mocking ساده اما قدرتمند است که با یک DSL خوانا نوشتن، خواندن و نگه‌داری تست‌ها را آسان می‌کند. هسته اصلی آن، زبانی است که به‌جای کدهای طولانی، نیت تست را شفاف بیان می‌کند. این ابزار از stubbing و argument matching پشتیبانی می‌کند؛ یعنی می‌توانید رفتار وابستگی‌های شبیه‌سازی‌شده را تعریف کنید و بر اساس الگوهای ورودی، انتظارها را دقیق و انعطاف‌پذیر تنظیم کنید. نتیجه، تست‌هایی شفاف، کم‌بوایلرپلیت و قابل اتکا برای تیم‌هاست.

#Testing #Mocking #DSL #UnitTesting #Stubbing #ArgumentMatching #TestAutomation

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


👑 @gopher_academy
👍1
Forwarded from Software Engineer Labdon
کامپیوترها برای نگهداری و نمایش کاراکترهای یک متن از یه فضای یک بایتی (معادل هشت بیت 0 یا 1) استفاده میکردن
این میزان فضا توی کامپیوتر میتونه شامل 255 حالت مختلف بشه
کامپیوترها برای نشانه‌های گرامری، حروف انگلیسی و عدد از استاندارد اسکی (ASCII) استفاده میکردن
این استاندارد آمریکایی میاد برای هر کاراکتر یه معادل عددی تعریف میکنه
مثلا کاراکتر A در اسکی معادل عدد 65هست
قرار گرفتن این اعداد پشت سر هم در کامپیوتر یک متن رو میسازه

مشابه این استاندارد معادل عددی برای پشتیبانی از تمام زبان‌های دنیا به وجود اومد که یونیکد (Unicode) نام داره
کاراکترهای انگلیسی و اعداد انگلیسی توی یونیکد از همون اعداد استاندارد اسکی استفاده میکنن و در ادامه پشتیبانی از کاراکترهای بقیه زبان‌های دنیا بهش اضافه میشه

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

حالا شما برای نگهداری یک متن که شامل کاراکترهای
یونیکد هست نیاز دارین 3 بایت برای هر کاراکتر اختصاص بدین
کاراکترهای انگلیسی تو یونیکد تنها یک بایت هم براشون کافیه ولی اگه شما برای یه متن انگلیسی، هر کاراکتر رو سه بایت در نظر بگیرین عملا به ازای هر کاراکتر انگلیسی دو بایت فضا رو هدر دادین
مثلا تو یه متن با ده هزار کاراکتر،
یه چیزی حدود 20 کیلوبایت فضای کامپیوتر رو هدر دادین
چه وقتی میخاین ازش استفاده کنین و توی رم هست و چه وقتی که روی هارد دیسک برای استفاده در آینده ذخیره شده

اینجاست که UTF-8 میتونه کمک کنه

این استاندارد که توسط یونیکد تعریف شده به جای اینکه بیاد فضای 3 بایتی به هر کاراکتر
اختصاص بده، میاد از 7 بیت راست یک بایت برای کاراکترهای اسکی استفاده میکنه

و برای کاراکترهای بعدی علاوه بر خود کاراکتر، تعداد بایت مصرف شده برای اون کاراکتر هم داخل بایت اول ذخیره میکنه
یعنی 128 کاراکتر اول اسکی به شکل عادی ذخیره میشن بدون تغییر خاصی با فقط یک بایت فضا

ولی برای کاراکترهای بعدی میاد و داخل بایت اول مشخص میکنه چه میزان فضا برای کاراکتر استفاده شده

این میزان فضا از یک بایت تا چهاربایت میتونه متغیر باشه

حالا چه شکلی اینکارو میکنه
تو یه بایت برای 128 عدد اولیه اسکی، بیت چپ همیشه صفر هست

اما وقتی بیت چپ یک میشه یعنی با یه کاراکتر UTF8 طرف هستیم

همونطور که گفتم هر کاراکتر توی UTF-8 میتونه از یک بایت تا چهاربایت متغیر باشه

کامپیوتر چطور اینو تشخیص میده؟

بیت‌های 1 اولِ بایت رو میشماره تا به عدد 0 صفر برسه
یعنی اگه بایت اول با عدد باینری 110 شروع بشه، یعنی دوبایت فضا استفاده شده
اگه 1110 باشه سه بایت و ...

تو UTF-8 فضای بیت‌های بایت اول بین خود کاراکتر و تعداد بایت تقسیم میشه و متغیره

اما تو بایت‌های دوم و سوم و چهارم همیشه شش تا بیت راست برای خود کاراکتر استفاده میشه و دو بیت دیگه برای هندل کردن ارور تو utf-8 استفاده میشه
امیدوارم تونسته باشم با دانش ناقص خودم شما رو در مورد این انکدینگ رایج دنیای کامپیوتر آشنا کرده باشم

توضیحات دقیق‌تر:
https://en.wikipedia.org/wiki/UTF-8

سایت استفاده شده برای تست بایت UTF-8:
https://utf8-playground.netlify.app/


| <Amir/>
👍2🔥1🍾1🤝1
🔵 عنوان مقاله
Failsafe: Fault Tolerance, Resilience Patterns & Policies

🟢 خلاصه مقاله:
Failsafe یک کتابخانه برای ساخت اپلیکیشن‌های fault-tolerant است که به شما امکان می‌دهد کدهای حساس را با مجموعه‌ای از سیاست‌های تاب‌آور مانند Retry، CircuitBreaker، RateLimiter، Timeout و Fallback بپوشانید. این سیاست‌ها قابل ترکیب‌اند و بدون تغییر منطق کسب‌وکار، حفاظت‌های چندلایه ایجاد می‌کنند.

در نسخه‌های اخیر، دو قابلیت کلیدی اضافه شده است: نخست، usage tracking برای اعمال عدالت و جلوگیری از اثر “noisy neighbor” از طریق پایش مصرف و اجرای محدودیت‌ها یا سهمیه‌ها. دوم، execution budgets برای تعیین سقف کلی هزینه اعمال تاب‌آوری—مثل مجموع retries یا hedges—در سطح یک فراخوانی، جریان کاری یا کل سیستم. این بودجه‌ها مانع از افراط در بازیابی می‌شوند و تعادلی بین نرخ موفقیت، تأخیر، هزینه و SLOها برقرار می‌کنند.

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

#FaultTolerance #Resilience #Failsafe #Retry #CircuitBreaker #RateLimiter #Timeout #Fallback

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


👑 @gopher_academy
1
Forwarded from Bardia & Erfan
پاول دورُف: حاضرَم بمیرم، ولی آزادی و امنیت کاربران رو نفروشم!

در گفت‌وگوی عمیق با «لِکس فریدمن»، بنیان‌گذار تلگرام از فلسفهٔ زندگی، حریم خصوصی، بیت‌کوین و مقاومتش در برابر فشار دولت‌ها گفت.
> 🗣
«من ترجیح می‌دم بمیرم و تمام داراییم رو از دست بدهم تا اینکه اطلاعات کاربران رو به هر دولتی تحویل بدم.
آزادی و امنیت داده‌ها، خط قرمز من و تلگرامه.»

🔒

او تأکید کرد تلگرام هیچ‌وقت “در پشتی” برای دولت‌ها باز نکرده و در برابر فشار روسیه و ایران برای دسترسی به اطلاعات یا سانسور مقاومت کرده است.
>
«در روسیه و ایران بارها تلاش شد ما رو مجبور به همکاری کنن. ولی ما مقاومت کردیم چون اگر یک‌بار کوتاه بیای، دیگه آزادی واقعی وجود نداره.»



📱 ۷ اصل فکری و مدیریتی پاول دورُف (بر اساس مصاحبه):

1️⃣ آزادی و اخلاق بالاتر از هر سود مالی — او می‌گوید حاضر است تمام دارایی‌اش را از دست بدهد تا آزادی بیان و امنیت کاربران حفظ شود.

2️⃣ مینیمالیسم و انضباط شخصی — سبک زندگی‌اش ساده، بدون الکل، قهوه یا حواس‌پرتی است؛ تمرکز کامل روی مأموریت و نظم ذهنی.

3️⃣ تیم کوچک، تأثیر بزرگ — معتقد است تیم‌های بزرگ بهره‌وری را می‌کُشند؛ موفقیت تلگرام حاصل اعتماد به چند نابغهٔ منضبط است.

4️⃣ مقاومت در برابر سانسور و در پشتی — هیچ دولت یا شرکتی حق کنترل یا شنود تلگرام را ندارد. رمزنگاری و طراحی MTProto را «دیوار آزادی دیجیتال» می‌نامد.

5️⃣ پول و قدرت ابزارند، نه هدف — او از مدل‌های انحصاری و کمیسیون‌های اپل و گوگل انتقاد می‌کند و تأکید دارد که ثروت نباید آزادی را محدود کند.

6️⃣ باور به فناوری آزاد مثل بیت‌کوین — بیت‌کوین را «نمادِ کاهش نیاز به اعتماد به واسطه‌ها و آزادی مالی» می‌داند؛ از پروژه TON به‌عنوان زیربنای اقتصاد آزاد تلگرام یاد می‌کند.

7️⃣ نگاه فلسفی به زندگی و مرگ — از کافکا، شوپنهاور و «جاودانگی کوانتومی» می‌گوید؛ باور دارد انسان باید بدون ترس از مرگ، بر پایهٔ ارزش‌های خودش زندگی کند.
64👍2🐳2🍾1💋1
🔵 عنوان مقاله
3 Critical TTL Patterns for In-Memory Caching

🟢 خلاصه مقاله:
این مقاله سه الگوی کلیدی TTL برای کش درون‌حافظه‌ای را توضیح می‌دهد و نشان می‌دهد چگونه انتخاب درست میان تازگی داده، کارایی و پایداری را ممکن می‌کند. الگوی اول، TTL ثابت است: هر مقدار پس از مدت مشخص منقضی می‌شود؛ ساده و قابل‌پیش‌بینی است، اما نزدیک انقضا می‌تواند داده قدیمی ارائه کند و پس از انقضا به «thundering herd» منجر شود مگر اینکه با jitter و هم‌گرایی درخواست‌ها مدیریت شود. الگوی دوم، TTL لغزشی است: هر دسترسی عمر آیتم را تمدید می‌کند، برای کلیدهای پرترافیک عالی است اما بدون «حداکثر عمر» ممکن است بعضی مقادیر عملاً هرگز تازه‌سازی نشوند. الگوی سوم، stale-while-revalidate (و refresh-ahead) است: مقدار کمی کهنه فوراً سرو می‌شود و تازه‌سازی در پس‌زمینه انجام می‌گیرد؛ با single-flight از هجوم درخواست‌های همسان جلوگیری می‌کند و در صورت خطا می‌توان با stale-if-error موقتاً از آخرین مقدار سالم استفاده کرد. در عمل ترکیب این الگوها—به‌همراه TTLهای متفاوت برای هر کلید، jitter، backoff و رصد دقیق نرخ hit/miss—به تعادل بهینه می‌انجامد. نویسنده برای نمایش پیاده‌سازی‌های عملی از کتابخانه Hot در اکوسیستم Go بهره می‌گیرد تا استفاده از این الگوها ساده و کارا شود.

#Caching #TTL #InMemoryCache #Go #Golang #StaleWhileRevalidate #Performance #CacheStampede

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


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