🔵 عنوان مقاله
How Go 1.24's Swiss Tables 'Saved Us Hundreds of Gigabytes'
🟢 خلاصه مقاله:
در نسخه 1.24 زبان برنامهنویسی Go، پیادهسازی 'Swiss Tables' جدید به کاهش مصرف حافظه در نقشههای بزرگ در حافظه کمک کرده است. این بهبود از طریق پروفایل و اندازهگیری دقیق و بهینهسازیهای سطح ساختار انجام شده، که در نهایت منجر به صرفهجوییهای بزرگ در سطح انبوه شده است. این رویکرد نوآورانه نه تنها باعث کاهش استفاده از حافظه شده، بلکه سرعت دسترسی به دادهها را نیز حفظ یا بهبود بخشیده است.
🟣لینک مقاله:
https://golangweekly.com/link/172069/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How Go 1.24's Swiss Tables 'Saved Us Hundreds of Gigabytes'
🟢 خلاصه مقاله:
در نسخه 1.24 زبان برنامهنویسی Go، پیادهسازی 'Swiss Tables' جدید به کاهش مصرف حافظه در نقشههای بزرگ در حافظه کمک کرده است. این بهبود از طریق پروفایل و اندازهگیری دقیق و بهینهسازیهای سطح ساختار انجام شده، که در نهایت منجر به صرفهجوییهای بزرگ در سطح انبوه شده است. این رویکرد نوآورانه نه تنها باعث کاهش استفاده از حافظه شده، بلکه سرعت دسترسی به دادهها را نیز حفظ یا بهبود بخشیده است.
🟣لینک مقاله:
https://golangweekly.com/link/172069/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Datadog
How Go 1.24's Swiss Tables saved us hundreds of gigabytes | Datadog
Go 1.24's Swiss Tables cut our map memory usage by up to 70% in high-traffic workloads. Here's how we profiled the savings and improved performance.
❤4 1
Gopher Academy
'Swiss Tables'
اگر میخواید در مورد swiss map ها اطلاعات بیشتر داشته باشید این رفرنس ها به شما کمک می کندد
https://www.dolthub.com/blog/2023-03-28-swiss-map/
https://www.youtube.com/watch?v=JZE3_0qvrMg
https://abseil.io/about/design/swisstables
https://www.youtube.com/watch?v=ncHmEUmJZf4
http://graphics.stanford.edu/~seander/bithacks.html##ValueInWord
https://aras-p.info/blog/2016/08/09/More-Hash-Function-Tests/
https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
https://www.dolthub.com/blog/2023-03-28-swiss-map/
https://www.youtube.com/watch?v=JZE3_0qvrMg
https://abseil.io/about/design/swisstables
https://www.youtube.com/watch?v=ncHmEUmJZf4
http://graphics.stanford.edu/~seander/bithacks.html##ValueInWord
https://aras-p.info/blog/2016/08/09/More-Hash-Function-Tests/
https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
Dolthub
SwissMap: A smaller, faster Golang Hash Table
Initial release of SwissMap, a Golang port of Abseil's flat_hash_map.
🍾2
🔵 عنوان مقاله
How to Use Go Tooling + Depot’s API to Outsource Container Builds
🟢 خلاصه مقاله:
مقاله به بررسی استفاده از ابزار "Depot" برای ساخت تصاویر بدون اعتماد به صورت سریع و امن میپردازد. "Depot" با کاهش پیچیدگیهای ارکستراسیون کانتینر، به توسعهدهندگان کمک میکند تا بدون نیاز به پیکربندیهای پیچیده، مستقیماً به مرحله استقرار بپردازند. این ابزار همچنین تأکید زیادی بر امنیت دارد و محیطی را فراهم میآورد که در آن تصاویر با اقدامات امنیتی پیشرفته ساخته میشوند که این امر خطرات احتمالی را کاهش میدهد. از سوی دیگر، "Depot" با اتوماتیک کردن فرآیندهای زمانبر، به افزایش کارایی کمک میکند و ابزاری ارزشمند در توسعه نرمافزار مدرن محسوب میشود.
🟣لینک مقاله:
https://golangweekly.com/link/172092/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How to Use Go Tooling + Depot’s API to Outsource Container Builds
🟢 خلاصه مقاله:
مقاله به بررسی استفاده از ابزار "Depot" برای ساخت تصاویر بدون اعتماد به صورت سریع و امن میپردازد. "Depot" با کاهش پیچیدگیهای ارکستراسیون کانتینر، به توسعهدهندگان کمک میکند تا بدون نیاز به پیکربندیهای پیچیده، مستقیماً به مرحله استقرار بپردازند. این ابزار همچنین تأکید زیادی بر امنیت دارد و محیطی را فراهم میآورد که در آن تصاویر با اقدامات امنیتی پیشرفته ساخته میشوند که این امر خطرات احتمالی را کاهش میدهد. از سوی دیگر، "Depot" با اتوماتیک کردن فرآیندهای زمانبر، به افزایش کارایی کمک میکند و ابزاری ارزشمند در توسعه نرمافزار مدرن محسوب میشود.
🟣لینک مقاله:
https://golangweekly.com/link/172092/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Depot
Container security at scale: Building untrusted images safely
Many SaaS platforms need to run customer code securely and fast. Rather than building container infrastructure from scratch, you can use Depot's API to handle the heavy lifting. Here's how to build Go tooling that creates isolated projects, manages builds…
❤3
Forwarded from 𓄂 Bardia 𓆃
بازجویی دوباره از مدیرعامل تلگرام در فرانسه
▪️پاول دورف، مدیرعامل تلگرام، روز گذشته برای سومین بار در دادگاهی در پاریس حاضر شد تا به اتهاماتی مرتبط با تسهیل جرایم سازمانیافته در بستر این پیامرسان پاسخ دهد. او به همراه چهار وکیلش در جلسهای رسمی شرکت کرد.
▪️این پرونده مربوط به بازداشت دورف در سال ۲۰۲۴ در فرانسه است؛ موضوع اصلی، نقش احتمالی تلگرام در انتشار محتوای غیرقانونی و ضعف در نظارت بر آنهاست.
▪️تیم حقوقی او با انتشار بیانیهای تأکید کردهاند:
▪️پاول دورف، مدیرعامل تلگرام، روز گذشته برای سومین بار در دادگاهی در پاریس حاضر شد تا به اتهاماتی مرتبط با تسهیل جرایم سازمانیافته در بستر این پیامرسان پاسخ دهد. او به همراه چهار وکیلش در جلسهای رسمی شرکت کرد.
▪️این پرونده مربوط به بازداشت دورف در سال ۲۰۲۴ در فرانسه است؛ موضوع اصلی، نقش احتمالی تلگرام در انتشار محتوای غیرقانونی و ضعف در نظارت بر آنهاست.
▪️تیم حقوقی او با انتشار بیانیهای تأکید کردهاند:
«ما هم مشروعیت کیفرخواست صادرشده علیه موکلمان و هم روند بعضی از اقدامات تحقیقاتی را، که در تضاد با قوانین داخلی و مقررات اتحادیه اروپا بودهاند، بهطور جدی زیر سوال میبریم.»
🔵 عنوان مقاله
Integration Testing for Go Apps using Testcontainers and Containerized Databases
🟢 خلاصه مقاله:
Testcontainers به توسعهدهندگان امکان میدهد تا اپلیکیشنهای خود را به آزمون بگذارند بدون آنکه نیاز به مدیریت وابستگیهای واقعی و یا استفاده از خدمات تولیدی داشته باشند. این ابزار قادر است خدمات واقعی را فقط به مدت اجرای آزمونها به وجود آورد. استفاده از Testcontainers فرایند آزمون را موثرتر ساخته و اطمینان میدهد که هر آزمون در محیطی کنترل شده و بدون تداخل با دیگر آزمونها اجرا شود.
🟣لینک مقاله:
https://golangweekly.com/link/172081/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Integration Testing for Go Apps using Testcontainers and Containerized Databases
🟢 خلاصه مقاله:
Testcontainers به توسعهدهندگان امکان میدهد تا اپلیکیشنهای خود را به آزمون بگذارند بدون آنکه نیاز به مدیریت وابستگیهای واقعی و یا استفاده از خدمات تولیدی داشته باشند. این ابزار قادر است خدمات واقعی را فقط به مدت اجرای آزمونها به وجود آورد. استفاده از Testcontainers فرایند آزمون را موثرتر ساخته و اطمینان میدهد که هر آزمون در محیطی کنترل شده و بدون تداخل با دیگر آزمونها اجرا شود.
🟣لینک مقاله:
https://golangweekly.com/link/172081/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Microsoft News
Integration testing for Go applications using Testcontainers and containerized databases
Explore the Azure Cosmos DB Go SDK for effective integration testing with real service dependencies using Testcontainers.
❤2
Forwarded from Software Engineer Labdon
ابزار CodeRabbit AI یک افزونه مبتنی بر هوش مصنوعی است که مخصوص کمک به توسعهدهندگان طراحی شده و در محیطهایی مثل VS Code قابل استفاده است. این ابزار از مدلهای زبانی بزرگ (LLM) استفاده میکند تا درک عمیقی از کد شما داشته باشد و بتواند پیشنهادات هوشمندانه ارائه دهد.
---
🐰 CodeRabbit AI چیست؟
CodeRabbit AI در اصل یک دستیار کدنویسی مبتنی بر هوش مصنوعی است که تمرکز ویژهای روی Code Review (بازبینی کد) دارد. این افزونه با استفاده از مدلهای قدرتمند مثل GPT-4 میتواند مانند یک توسعهدهنده با تجربه کد شما را تحلیل کرده و فیدبک فنی ارائه دهد.
---
✅ امکانات اصلی CodeRabbit AI:
1. 🔍 بازبینی خودکار کد (AI Code Review)
* با باز کردن یک Pull Request، CodeRabbit بهطور خودکار کد را تحلیل کرده و بازخورد حرفهای ارائه میدهد.
* بررسی میکند:
* خطاهای منطقی
* استانداردهای کدنویسی
* بهینهسازی عملکرد
* خوانایی و نگهداری کد
2. ✨ تولید کامنتهای هوشمند در Pull Request
* در GitHub یا GitLab، CodeRabbit میتواند مثل یک همکار فنی به PR شما پاسخ دهد و کامنت بنویسد.
3. 💬 گفتگوی متنی روی کد
* امکان گفتوگو با هوش مصنوعی درباره کدی که نوشتهاید (مانند ChatGPT اما داخل محیط IDE).
4. 🛠 پیشنهاد بهبود (Refactoring Suggestions)
* پیشنهادهایی برای سادهتر و خواناتر شدن کد ارائه میدهد.
* مثال: تغییر توابع طولانی، کاهش تکرار، نامگذاری بهتر متغیرها.
### 5. 📄 تولید توضیحات و مستندات
* میتواند توضیحات برای توابع و کلاسها بنویسد.
* تولید فایل
6. ✅ پشتیبانی از چند زبان برنامهنویسی
* پشتیبانی از زبانهای معروف مثل:
* JavaScript / TypeScript
* Python
* Go
* Rust
* C++ / C#
* و بسیاری دیگر
---
🔐 امنیت و کنترل
* CodeRabbit برای بازبینی از مدلهایی مثل GPT-4 استفاده میکنه.
* امکان تعیین سطوح دسترسی و حریم خصوصی در تیمها وجود دارد.
* تنظیمات برای غیرفعال کردن ارسال کد به بیرون هم فراهم شده است.
---
💰 هزینه و نسخهها
* نسخه رایگان برای کاربران انفرادی (با محدودیت بررسی کد).
* نسخه تجاری / تیمی با امکانات بیشتر و اتصال به GitHub Enterprise.
---
🔗 لینکها
* وبسایت رسمی: [https://coderabbit.ai](https://coderabbit.ai)
* افزونه VS Code: قابل نصب از Marketplace با جستجوی
* GitHub App: [https://github.com/apps/coderabbit](https://github.com/apps/coderabbit)
---
🐰 CodeRabbit AI چیست؟
CodeRabbit AI در اصل یک دستیار کدنویسی مبتنی بر هوش مصنوعی است که تمرکز ویژهای روی Code Review (بازبینی کد) دارد. این افزونه با استفاده از مدلهای قدرتمند مثل GPT-4 میتواند مانند یک توسعهدهنده با تجربه کد شما را تحلیل کرده و فیدبک فنی ارائه دهد.
---
✅ امکانات اصلی CodeRabbit AI:
1. 🔍 بازبینی خودکار کد (AI Code Review)
* با باز کردن یک Pull Request، CodeRabbit بهطور خودکار کد را تحلیل کرده و بازخورد حرفهای ارائه میدهد.
* بررسی میکند:
* خطاهای منطقی
* استانداردهای کدنویسی
* بهینهسازی عملکرد
* خوانایی و نگهداری کد
2. ✨ تولید کامنتهای هوشمند در Pull Request
* در GitHub یا GitLab، CodeRabbit میتواند مثل یک همکار فنی به PR شما پاسخ دهد و کامنت بنویسد.
3. 💬 گفتگوی متنی روی کد
* امکان گفتوگو با هوش مصنوعی درباره کدی که نوشتهاید (مانند ChatGPT اما داخل محیط IDE).
4. 🛠 پیشنهاد بهبود (Refactoring Suggestions)
* پیشنهادهایی برای سادهتر و خواناتر شدن کد ارائه میدهد.
* مثال: تغییر توابع طولانی، کاهش تکرار، نامگذاری بهتر متغیرها.
### 5. 📄 تولید توضیحات و مستندات
* میتواند توضیحات برای توابع و کلاسها بنویسد.
* تولید فایل
README.md
یا خلاصه ویژگیها.6. ✅ پشتیبانی از چند زبان برنامهنویسی
* پشتیبانی از زبانهای معروف مثل:
* JavaScript / TypeScript
* Python
* Go
* Rust
* C++ / C#
* و بسیاری دیگر
---
🔐 امنیت و کنترل
* CodeRabbit برای بازبینی از مدلهایی مثل GPT-4 استفاده میکنه.
* امکان تعیین سطوح دسترسی و حریم خصوصی در تیمها وجود دارد.
* تنظیمات برای غیرفعال کردن ارسال کد به بیرون هم فراهم شده است.
---
💰 هزینه و نسخهها
* نسخه رایگان برای کاربران انفرادی (با محدودیت بررسی کد).
* نسخه تجاری / تیمی با امکانات بیشتر و اتصال به GitHub Enterprise.
---
🔗 لینکها
* وبسایت رسمی: [https://coderabbit.ai](https://coderabbit.ai)
* افزونه VS Code: قابل نصب از Marketplace با جستجوی
CodeRabbit
* GitHub App: [https://github.com/apps/coderabbit](https://github.com/apps/coderabbit)
🍾2❤1
Forwarded from Gopher Academy
در Go، تفاوتهایی ظریف ولی مهم بین این سه نوع اعلان وجود دارد:
1.
2.
3.
هر یک از این موارد نشاندهنده یک نوع متفاوت از داده است که در ادامه به جزئیات و کاربردهای هر کدام میپردازیم:
### 1.
این متغیر یک اشارهگر (
#### توضیحات:
-ا
-ا
- این نوع اعلان زمانی استفاده میشود که نیاز دارید به جای اسلایس، به یک اشارهگر به اسلایس دسترسی داشته باشید، مثلاً وقتی میخواهید اسلایس را در یک تابع اصلاح کنید و تغییرات در خارج از تابع نیز منعکس شود.
### 2.
این متغیر یک اسلایس (
#### توضیحات:
-ا
-ا
- این نوع اعلان زمانی استفاده میشود که میخواهید به ساختارهای
### 3.
این متغیر یک اشارهگر (
#### توضیحات:
-ا
- ا
- این نوع اعلان زمانی مفید است که بخواهید اسلایس و عناصر آن را مستقیماً از طریق یک اشارهگر تغییر دهید، مانند اصلاح اسلایس و عناصر آن در یک تابع.
### خلاصه
-
-
-
هر کدام از این ساختارها کاربرد خاص خود را دارد و انتخاب صحیح بستگی به نیاز شما برای دستکاری دادهها و استفاده از اشارهگرها دارد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
1.
var x *[]book
2.
var a []*book
3.
var b *[]*book
هر یک از این موارد نشاندهنده یک نوع متفاوت از داده است که در ادامه به جزئیات و کاربردهای هر کدام میپردازیم:
### 1.
var x *[]book
این متغیر یک اشارهگر (
pointer
) به یک اسلایس (slice
) از ساختار book
است. #### توضیحات:
-ا
x
یک اشارهگر به یک اسلایس از نوع book
است.-ا
*[]book
نشاندهنده یک اسلایس است که خود شامل عناصر book
است.- این نوع اعلان زمانی استفاده میشود که نیاز دارید به جای اسلایس، به یک اشارهگر به اسلایس دسترسی داشته باشید، مثلاً وقتی میخواهید اسلایس را در یک تابع اصلاح کنید و تغییرات در خارج از تابع نیز منعکس شود.
### 2.
var a []*book
این متغیر یک اسلایس (
slice
) از اشارهگرها (pointers
) به ساختار book
است.#### توضیحات:
-ا
a
یک اسلایس است که هر عنصر آن یک اشارهگر به یک book
است.-ا
[]*book
یک اسلایس است که در آن هر عنصر یک اشارهگر به نوع book
است.- این نوع اعلان زمانی استفاده میشود که میخواهید به ساختارهای
book
به صورت اشارهگر دسترسی داشته باشید، مثلاً وقتی میخواهید عناصر را مستقیماً اصلاح کنید بدون اینکه اسلایس یا مقدار جدیدی ساخته شود.### 3.
var b *[]*book
این متغیر یک اشارهگر (
pointer
) به یک اسلایس (slice
) از اشارهگرها (pointers
) به book
است.#### توضیحات:
-ا
b
یک اشارهگر به اسلایسی است که هر عنصر آن یک اشارهگر به book
است.- ا
*[]*book
نشاندهنده یک اشارهگر به اسلایسی است که شامل اشارهگرهای به book
میباشد.- این نوع اعلان زمانی مفید است که بخواهید اسلایس و عناصر آن را مستقیماً از طریق یک اشارهگر تغییر دهید، مانند اصلاح اسلایس و عناصر آن در یک تابع.
### خلاصه
-
var x *[]book
: اشارهگر به یک اسلایس از book
.-
var a []*book
: اسلایسی از اشارهگرها به book
.-
var b *[]*book
: اشارهگر به یک اسلایس از اشارهگرها به book
.هر کدام از این ساختارها کاربرد خاص خود را دارد و انتخاب صحیح بستگی به نیاز شما برای دستکاری دادهها و استفاده از اشارهگرها دارد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
❤8👍2🍾2
🎂🎊امروز زادروز چنل گوفر آکادمی هست🎊🎂
🥂امروز ۸ مرداد دقیقا روزی بود که گوفر آکادمی متولد شد🎂
🍾توی این مسیر کلی چیز یادگرفتم و حتی کلی رفیق خوب پیدا کردم
👑روز های خوب و بد زیادی داشتم تا جای که بود تونستم مقالات مفید و بروز براتون بذارم
🌷کانال ما چهارشنبه ۸ مرداد سال ۹۹ شروع به فعالیت خودش کرد یعنی 5 سال میگذره از عمر این چنل (خیلی کوچیک بودیم اما زود بزرگ شدیم با تجربه تر شدیم در کنار شما)
🖐 دوستان این چنل ما رو حمایت کنید که همچنان با قدرت کارش رو ادامه بده👑🫡🍾🌷
💸🚬 به مناسبت این روز تخفیف 50 درصدی رو تمام تعرفه های تبلیغاتی چنل
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢اگر تلگرام پرمیموم داری boost کن 👇
🔵 https://t.me/gopher_academy?boost
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢لینک حمایت مالی👇
🔵 https://www.coffeete.ir/mrbardia72
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢 اگرم سوالی نظری انتقادی بود درخدمتم👇
🔵 @mrbardia72
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢اگر دنبال تبلیغ هستی اینجا پیام بده👇
🔵 @labdon_ads
🥂امروز ۸ مرداد دقیقا روزی بود که گوفر آکادمی متولد شد🎂
🍾توی این مسیر کلی چیز یادگرفتم و حتی کلی رفیق خوب پیدا کردم
👑روز های خوب و بد زیادی داشتم تا جای که بود تونستم مقالات مفید و بروز براتون بذارم
🌷کانال ما چهارشنبه ۸ مرداد سال ۹۹ شروع به فعالیت خودش کرد یعنی 5 سال میگذره از عمر این چنل (خیلی کوچیک بودیم اما زود بزرگ شدیم با تجربه تر شدیم در کنار شما)
🖐 دوستان این چنل ما رو حمایت کنید که همچنان با قدرت کارش رو ادامه بده👑🫡🍾🌷
💸🚬 به مناسبت این روز تخفیف 50 درصدی رو تمام تعرفه های تبلیغاتی چنل
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢اگر تلگرام پرمیموم داری boost کن 👇
🔵 https://t.me/gopher_academy?boost
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢لینک حمایت مالی👇
🔵 https://www.coffeete.ir/mrbardia72
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢 اگرم سوالی نظری انتقادی بود درخدمتم👇
🔵 @mrbardia72
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢اگر دنبال تبلیغ هستی اینجا پیام بده👇
🔵 @labdon_ads
Telegram
Gopher Academy
از این کانال حمایت کنید تا بتواند به قابلیتهای اضافی دسترسی پیدا کند.
🍾6❤4 1
Forwarded from 𓄂 Bardia 𓆃
نسخه 11.14 تلگرام منتشر شد
جستجوی پستها
حالا میتونی پستای کانالهای عمومی رو مستقیم سرچ کنی (فعلاً فقط برای پریمیومیها)
آلبوم استوری
استوریهاتو میتونی تو آلبوم بچینی، مثل خاطره سفر یا معرفی محصول تو کانالها
مجموعه هدیهها
هدایاتو دستهبندی کن! مثلا نایابها، موضوعیها و هرچی دلت خواست
امتیاز پروفایل
با خرید هدیه و پیام پولی، امتیاز میگیری و اعتبارت تو تلگرام بالا میره
هدایای خاص برای پریمیومیها
هدایای خفن و محدود فقط برای کاربرای پریمیوم میاد
مینیاپ جدید BotFather
رباتسازی راحتتر از همیشه شده؛ مستقیم از مینیاپ جدید مدیریت کن
جستجوی پستها
حالا میتونی پستای کانالهای عمومی رو مستقیم سرچ کنی (فعلاً فقط برای پریمیومیها)
آلبوم استوری
استوریهاتو میتونی تو آلبوم بچینی، مثل خاطره سفر یا معرفی محصول تو کانالها
مجموعه هدیهها
هدایاتو دستهبندی کن! مثلا نایابها، موضوعیها و هرچی دلت خواست
امتیاز پروفایل
با خرید هدیه و پیام پولی، امتیاز میگیری و اعتبارت تو تلگرام بالا میره
هدایای خاص برای پریمیومیها
هدایای خفن و محدود فقط برای کاربرای پریمیوم میاد
مینیاپ جدید BotFather
رباتسازی راحتتر از همیشه شده؛ مستقیم از مینیاپ جدید مدیریت کن
👍2
Forwarded from Software Engineer Labdon
🐧 ویرایشگر کد Zed :
امکان غیرفعالسازی هوش مصنوعی
🔹اZed چیست؟
اZed یک ویرایشگر کد مدرن و متنباز است که ویژگیهای منحصربهفردی ارائه میدهد:
✅ سبک و سریع (حتی روی سیستمهای ضعیف)
✅ پشتیبانی از چندین زبان برنامهنویسی
✅ امکانات پیشرفته مانند دیباگر داخلی و Git Integration
🔹 ویژگی جدید:
غیرفعالسازی هوش مصنوعی در آخرین آپدیت + امکان خاموش کردن کامل قابلیتهای هوش مصنوعی اضافه شده است.
🔸 مزایای این قابلیت:
- حفظ حریم خصوصی
(عدم ارسال کدها به سرورهای خارجی)
- کاهش مصرف منابع سیستم
- تمرکز بیشتر روی کدنویسی بدون مزاحمت پیشنهادات AI
- امکان استفاده از مدلهای محلی به جای سرویس ابری
🔹 نحوه غیرفعالسازی:
- باز کردن تنظیمات (Ctrl+, یا Cmd+,)
- جستجوی "AI"
- غیرفعال کردن گزینههای مربوطه
🔹 مقایسه با سایر ویرایشگرها:
- سرعت: Zed > VS Code > JetBrains
- هوش مصنوعی: Zed (انعطافپذیر) - VS Code (وابسته به افزونه) - JetBrains (پولی)
- متنباز بودن: Zed و VS Code متنباز هستند
🔹 دانلود:
🌐 وبسایت رسمی: zed.dev
📥 برای ویندوز، مک و لینوکس در دسترس است.
👤 نویسنده: امیرحسین قاسمزاده
📚 منبع: zed.dev
➖➖➖➖➖➖➖➖
https://t.me/addlist/QtXiQlynEJwzODBk
امکان غیرفعالسازی هوش مصنوعی
🔹اZed چیست؟
اZed یک ویرایشگر کد مدرن و متنباز است که ویژگیهای منحصربهفردی ارائه میدهد:
✅ سبک و سریع (حتی روی سیستمهای ضعیف)
✅ پشتیبانی از چندین زبان برنامهنویسی
✅ امکانات پیشرفته مانند دیباگر داخلی و Git Integration
🔹 ویژگی جدید:
غیرفعالسازی هوش مصنوعی در آخرین آپدیت + امکان خاموش کردن کامل قابلیتهای هوش مصنوعی اضافه شده است.
🔸 مزایای این قابلیت:
- حفظ حریم خصوصی
(عدم ارسال کدها به سرورهای خارجی)
- کاهش مصرف منابع سیستم
- تمرکز بیشتر روی کدنویسی بدون مزاحمت پیشنهادات AI
- امکان استفاده از مدلهای محلی به جای سرویس ابری
🔹 نحوه غیرفعالسازی:
- باز کردن تنظیمات (Ctrl+, یا Cmd+,)
- جستجوی "AI"
- غیرفعال کردن گزینههای مربوطه
🔹 مقایسه با سایر ویرایشگرها:
- سرعت: Zed > VS Code > JetBrains
- هوش مصنوعی: Zed (انعطافپذیر) - VS Code (وابسته به افزونه) - JetBrains (پولی)
- متنباز بودن: Zed و VS Code متنباز هستند
🔹 دانلود:
🌐 وبسایت رسمی: zed.dev
📥 برای ویندوز، مک و لینوکس در دسترس است.
👤 نویسنده: امیرحسین قاسمزاده
📚 منبع: zed.dev
➖➖➖➖➖➖➖➖
https://t.me/addlist/QtXiQlynEJwzODBk
❤2
استفاده از هوش مصنوعی در مصاحبههای شغلی متا آزاد شد!
▪️متا بهزودی به برنامهنویسهای تازهوارد اجازه میده حین تست کدنویسی از ابزارهای هوش مصنوعی استفاده کنن!
▪️چرا؟! چون اینطوری :
1. بهتر به واقعیت محیط کاری نزدیک میشن
2. جلوی تقلبهای پنهانی با AI گرفته میشه ، چون دیگه خود استفاده از AI بخشی از تست حساب میشه!
🧠 متا میگه آیندهی کدنویسی با هوش مصنوعیه، پس مصاحبهها هم باید با این واقعیت همسو بشن.
▪️متا بهزودی به برنامهنویسهای تازهوارد اجازه میده حین تست کدنویسی از ابزارهای هوش مصنوعی استفاده کنن!
▪️چرا؟! چون اینطوری :
1. بهتر به واقعیت محیط کاری نزدیک میشن
2. جلوی تقلبهای پنهانی با AI گرفته میشه ، چون دیگه خود استفاده از AI بخشی از تست حساب میشه!
🧠 متا میگه آیندهی کدنویسی با هوش مصنوعیه، پس مصاحبهها هم باید با این واقعیت همسو بشن.
👍8🍾1
پردازش ۱.۲ میلیون پیام در ثانیه با Kafka و Go — معماری سبک اما حرفهای
وقتی نرخ ورود داده به میلیونها پیام در ثانیه میرسد، عامل تعیینکننده در یک معماری بهینه و سریع و موثر، نه ارتقای پرهزینهی سختافزار است و نه تکیه بر زیرساختهای سنگین ابری، بلکه یک طراحی دقیق، ساده و هوشمندانه است که میتواند تفاوت واقعی را رقم بزند.
اخیراً با مقالهای مواجه شدم که دقیقاً همین رویکرد را نشان میداد: تیمی که با استفاده از مفاهیم سبکوزن مانند goroutine در Go و چند تصمیم مهندسیشده، توانسته بودند تنها با یک سختافزار معمولی، بیش از ۱ میلیون پیام در ثانیه را بهصورت پایدار پردازش کنند.
در این پست، به مرور نکات کلیدی این معماری ساده اما تأثیرگذار میپردازیم — روایتی کاربردی از دنیای مهندسی داده و سیستمهای توزیعشده.
مقاله اصلی:
Kafka at 1M Messages/Second with Go – Our Exact Pipeline Setup
چالشها:
- هجوم سنگین دادهها از دستگاههای IoT و کاربران
- نیاز به پردازش بلادرنگ و ارسال همزمان به چند سرویس
- تضمین پایداری، مانیتورینگ دقیق و ریکاوری خودکار در خطا
مکانیزمهایی که این معماری را ممکن کردند:
- کامیت دستی offsetها:
تأیید دریافت فقط زمانی انجام میشود که پیام کاملاً و با موفقیت پردازش شده باشد — جلوگیری از گمشدن یا پردازش تکراری دادهها.
- مکانیزم Worker Pool کنترلشده با goroutine:
بهجای ایجاد goroutine برای هر پیام، یک استخر ثابت از goroutineها (به ازای هر پارتیشن کافکا) با طول کانال مشخص و محدود، تعریف شده است که پیامها را موازی اما کنترلشده پردازش میکنند.
- یک Worker Pool به ازای هر پارتیشن Kafka:
مثلاً با ۱۰ پارتیشن و ۵ goroutine برای هر پارتیشن، در مجموع ۵۰ goroutine داریم — بدون همپوشانی، بدون رقابت اضافه.
- الگوی Dispatcher برای جداسازی دریافت از پردازش:
- بخش اول: فقط دریافت پیام و ارسال به کانال داخلی (یک کانسیومر به ازای هر پارتیشن)
- بخش دوم: پردازش پیام از صف به کمک Worker Pool
- مکانیزم Batching در ارسال خروجی:
پیامهای پردازششده بهصورت گروهی ارسال میشوند، مثلاً به دیتابیس یا تاپیکهای دیگر Kafka. این کار فشار ارتباطی را کاهش داده و throughput را بالا برده است.
- اعمال Backpressure هوشمند:
با محدود کردن ظرفیت صفها، اگر سیستم تحت فشار شدید قرار گیرد، مصرف از Kafka موقتاً کند یا متوقف میشود تا منابع آزاد شوند. این مکانیزم، از overload جلوگیری کرده و سیستم را در حالت پایدار نگه میدارد.
- مانیتورینگ دقیق با Prometheus و Grafana:
شاخصهایی مثل تأخیر پردازش، consumer lag و مصرف CPU بهصورت لحظهای مانیتور میشوند — برای تنظیم سریع و واکنش فوری.
نتایج:
- نرخ پردازش: ۱.۲M msg/sec
- تأخیر کل مسیر: <۳ms
- مصرف CPU: ۹۰٪ (پایدار و قابل پیشبینی)
نکات مهم برای مهندسان داده و سیستمهای توزیعشده:
- طراحی درست مهمتر از افزایش منابع
- انجام commit دقیق، batching و backpressure = ستونهای یک سیستم مقاوم
- تفکیک دریافت/پردازش + تقسیم کار بین پارتیشنها = مقیاسپذیری مؤثر
- مانیتورینگ لحظهای = پاسخ سریع به فشارها و خطاها
| <Mojtaba Banaie/>
وقتی نرخ ورود داده به میلیونها پیام در ثانیه میرسد، عامل تعیینکننده در یک معماری بهینه و سریع و موثر، نه ارتقای پرهزینهی سختافزار است و نه تکیه بر زیرساختهای سنگین ابری، بلکه یک طراحی دقیق، ساده و هوشمندانه است که میتواند تفاوت واقعی را رقم بزند.
اخیراً با مقالهای مواجه شدم که دقیقاً همین رویکرد را نشان میداد: تیمی که با استفاده از مفاهیم سبکوزن مانند goroutine در Go و چند تصمیم مهندسیشده، توانسته بودند تنها با یک سختافزار معمولی، بیش از ۱ میلیون پیام در ثانیه را بهصورت پایدار پردازش کنند.
در این پست، به مرور نکات کلیدی این معماری ساده اما تأثیرگذار میپردازیم — روایتی کاربردی از دنیای مهندسی داده و سیستمهای توزیعشده.
مقاله اصلی:
Kafka at 1M Messages/Second with Go – Our Exact Pipeline Setup
چالشها:
- هجوم سنگین دادهها از دستگاههای IoT و کاربران
- نیاز به پردازش بلادرنگ و ارسال همزمان به چند سرویس
- تضمین پایداری، مانیتورینگ دقیق و ریکاوری خودکار در خطا
مکانیزمهایی که این معماری را ممکن کردند:
- کامیت دستی offsetها:
تأیید دریافت فقط زمانی انجام میشود که پیام کاملاً و با موفقیت پردازش شده باشد — جلوگیری از گمشدن یا پردازش تکراری دادهها.
- مکانیزم Worker Pool کنترلشده با goroutine:
بهجای ایجاد goroutine برای هر پیام، یک استخر ثابت از goroutineها (به ازای هر پارتیشن کافکا) با طول کانال مشخص و محدود، تعریف شده است که پیامها را موازی اما کنترلشده پردازش میکنند.
- یک Worker Pool به ازای هر پارتیشن Kafka:
مثلاً با ۱۰ پارتیشن و ۵ goroutine برای هر پارتیشن، در مجموع ۵۰ goroutine داریم — بدون همپوشانی، بدون رقابت اضافه.
- الگوی Dispatcher برای جداسازی دریافت از پردازش:
- بخش اول: فقط دریافت پیام و ارسال به کانال داخلی (یک کانسیومر به ازای هر پارتیشن)
- بخش دوم: پردازش پیام از صف به کمک Worker Pool
- مکانیزم Batching در ارسال خروجی:
پیامهای پردازششده بهصورت گروهی ارسال میشوند، مثلاً به دیتابیس یا تاپیکهای دیگر Kafka. این کار فشار ارتباطی را کاهش داده و throughput را بالا برده است.
- اعمال Backpressure هوشمند:
با محدود کردن ظرفیت صفها، اگر سیستم تحت فشار شدید قرار گیرد، مصرف از Kafka موقتاً کند یا متوقف میشود تا منابع آزاد شوند. این مکانیزم، از overload جلوگیری کرده و سیستم را در حالت پایدار نگه میدارد.
- مانیتورینگ دقیق با Prometheus و Grafana:
شاخصهایی مثل تأخیر پردازش، consumer lag و مصرف CPU بهصورت لحظهای مانیتور میشوند — برای تنظیم سریع و واکنش فوری.
نتایج:
- نرخ پردازش: ۱.۲M msg/sec
- تأخیر کل مسیر: <۳ms
- مصرف CPU: ۹۰٪ (پایدار و قابل پیشبینی)
نکات مهم برای مهندسان داده و سیستمهای توزیعشده:
- طراحی درست مهمتر از افزایش منابع
- انجام commit دقیق، batching و backpressure = ستونهای یک سیستم مقاوم
- تفکیک دریافت/پردازش + تقسیم کار بین پارتیشنها = مقیاسپذیری مؤثر
- مانیتورینگ لحظهای = پاسخ سریع به فشارها و خطاها
| <Mojtaba Banaie/>
👍3❤2🍾2
ما وقتی برنامه Go مون رو میبندیم، فقط یه Ctrl+C میزنیم و میگیم:
“خب، shutdown شد!”
و تمام!
ولی واقعیت اینه که خاموش شدن یه سرویس واقعی، اونم توی Production،
خیلی بیشتر از یه سیگنال سادهست.
اگه درست پیادهسازی نشه:
- ممکنه وسط ارسال درخواست، ارتباط قطع شه
- جابها در حال پردازش نصفهکاره بمونن
- کانکشنها به دیتابیس یا Redis نشت کنن
- و حتی برنامه قبل از تموم شدن goroutineها، کلاً بسته شه
تو این مقاله، بهصورت خلاصه نوشتم:
- چطور با signal.NotifyContext درست shutdown رو هندل کنیم
- چطور http.Server رو با Shutdown(ctx) ببندیم
- چطور workerها رو با context و sync.WaitGroup تمیز ببندیم
- و تو Kubernetes چطور از terminationGracePeriodSeconds درست استفاده کنیم
https://medium.com/@a.mousavi/graceful-shutdown-in-go-part-1-build-production-ready-services-without-dropping-requests-b55934c217c1
“خب، shutdown شد!”
و تمام!
ولی واقعیت اینه که خاموش شدن یه سرویس واقعی، اونم توی Production،
خیلی بیشتر از یه سیگنال سادهست.
اگه درست پیادهسازی نشه:
- ممکنه وسط ارسال درخواست، ارتباط قطع شه
- جابها در حال پردازش نصفهکاره بمونن
- کانکشنها به دیتابیس یا Redis نشت کنن
- و حتی برنامه قبل از تموم شدن goroutineها، کلاً بسته شه
تو این مقاله، بهصورت خلاصه نوشتم:
- چطور با signal.NotifyContext درست shutdown رو هندل کنیم
- چطور http.Server رو با Shutdown(ctx) ببندیم
- چطور workerها رو با context و sync.WaitGroup تمیز ببندیم
- و تو Kubernetes چطور از terminationGracePeriodSeconds درست استفاده کنیم
https://medium.com/@a.mousavi/graceful-shutdown-in-go-part-1-build-production-ready-services-without-dropping-requests-b55934c217c1
Medium
Graceful Shutdown in Go (Part 1): Build Production-Ready Services Without Dropping Requests
You should design your systems to fail gracefully. — Martin Fowler
❤7👍5🍾2
Forwarded from AI Labdon
عرفی هیولای جدید گوگل ؛ آیا با خطرناکترین هوش مصنوعی دنیا روبهرو هستیم؟
▪️گوگل بهتازگی از مدل پیشرفتهی خودش بهنام Gemini 2.5 Deep Think رونمایی کرده؛ مدلی که در آزمایشها حتی موفق به کسب مدال طلا در المپیاد جهانی ریاضی شده!
▪️این مدل فقط برای کاربران پلن Ultra با قیمت ماهانه 250 دلار در دسترسه و استفاده ازش با هشدارها و محدودیتهای خاصی همراهه.
▪️در تستهای داخلی تابستون 2024، گوگل رسماً اعلام کرده Deep Think در حال نزدیک شدن به مرزهاییست که ممکنه اون رو به ابزاری غیرقابل کنترل در دستان افراد نادرست تبدیل کنه
▪️گوگل بهتازگی از مدل پیشرفتهی خودش بهنام Gemini 2.5 Deep Think رونمایی کرده؛ مدلی که در آزمایشها حتی موفق به کسب مدال طلا در المپیاد جهانی ریاضی شده!
▪️این مدل فقط برای کاربران پلن Ultra با قیمت ماهانه 250 دلار در دسترسه و استفاده ازش با هشدارها و محدودیتهای خاصی همراهه.
▪️در تستهای داخلی تابستون 2024، گوگل رسماً اعلام کرده Deep Think در حال نزدیک شدن به مرزهاییست که ممکنه اون رو به ابزاری غیرقابل کنترل در دستان افراد نادرست تبدیل کنه
❤8
مقاله «Writing Go Code like a Pro!» در Go Chronicles، همراه با نکات مهم و مثالهای کوچک برای درک بهتر:
---
🧠 نکات کلیدی برای نوشتن کد حرفهای در Go
1. نامگذاری متغیرها و توابع
* از camelCase استفاده کنید و از snake\_case پرهیز شود.
مثال:
* نامها را کوتاه ولی واضح نگه دارید؛ بسته به scope، اسم کوتاهتر مناسبتر است.
* برای شاخص حلقهها از حروف تک مثل
> بیشترین زمان را برای خواندن کد دیگران میگذارید، پس کدی بنویسید که دیگران بدون دردسر بفهمند.
---
2. نامگذاری پکیجها
* نام پکیجها باید کوتاه، پاییننویس (lowercase) و معمولاً مفرد باشند (مثلاً
---
3. طراحی ساختار پروژه
* پروژههای کوچک: تمام فایلها در ریشه، مثل
* برای پروژههای با چند executable: ساختار پیشنهادی:
* فقط وقتی نیاز واقعی به جداکردن logic دارید، پکیج مجزا در
---
4. رعایت اصول Domain-Driven Structure
* پکیجها را براساس سرویسها و موجودیتهای دامنه تعریف کنید (مثلاً پکیجهایی مثل
* اجتناب از ساختار تقلیدی MVC یا مدلهایی که ممکن است منجر به circular dependency شود.
---
5. شروع ساده و افزایش تدریجی ساختار
* اگر ایدهای ندارید، فقط با
---
6. فایلهای مرتبط را کنار هم نگه دارید
* توابع مرتبط، typeها و handlerهای یک واحد منطقی را در فایلهای نزدیک یا مشابه قرار دهید؛ این کار خوانایی را بالا میبرد.
---
7. اندازه فایل مهم نیست... مگر نگهداری را دشوار کند
* فایلهای بزرگ ایرادی ندارند، تا وقتی که نگهداری آنها راحت باشد. لازم نیست برای چند فایل ساده، پکیج ایجاد کنید.
---
8. وقتی لازم نیست پکیج جدا نسازید
* از ایجاد پکیجهای کماهمیت یا بسیار جزئی خودداری کنید؛ مگر قصد reuse مجزا یا جداسازی واضح logic را داشته باشید.)
---
9. به علائم هشدار ساختار دقت کنید
اگر موارد زیر را دیدید، زمان بازبینی ساختار فرارسیده:
* مشکل در یافتن نقاط کد،
* تغییرات گسترده در بخشهای متفاوت،
* سخت شدن debug،
* وابستگی حلقوی یا پیچیدگی error handling.
---
💡 جمعبندی نهایی
* تأکید روی خوانایی، نگهداریپذیری و ساختار معقول.
* شروع از سادهترین حالت، حفظ نامگذاری استاندارد Go و اجتناب از ساختارهای پیچیده غیر idiomatic Go.
* اجازه دهید پروژه در طول زمان ساختار مناسب خودش را بیابد، نه طراحی اولیهی کاملاً دقیق.
---
🧠 نکات کلیدی برای نوشتن کد حرفهای در Go
1. نامگذاری متغیرها و توابع
* از camelCase استفاده کنید و از snake\_case پرهیز شود.
مثال:
myVariable
بجای my_variable
☑️* نامها را کوتاه ولی واضح نگه دارید؛ بسته به scope، اسم کوتاهتر مناسبتر است.
* برای شاخص حلقهها از حروف تک مثل
i
استفاده کنید، نه index
. > بیشترین زمان را برای خواندن کد دیگران میگذارید، پس کدی بنویسید که دیگران بدون دردسر بفهمند.
---
2. نامگذاری پکیجها
* نام پکیجها باید کوتاه، پاییننویس (lowercase) و معمولاً مفرد باشند (مثلاً
service
بجای services
, utils
توصیه نمیشود).---
3. طراحی ساختار پروژه
* پروژههای کوچک: تمام فایلها در ریشه، مثل
main.go
.* برای پروژههای با چند executable: ساختار پیشنهادی:
cmd/
app1/
app2/
internal/
go.mod
README.md
* فقط وقتی نیاز واقعی به جداکردن logic دارید، پکیج مجزا در
internal/
بسازید. ---
4. رعایت اصول Domain-Driven Structure
* پکیجها را براساس سرویسها و موجودیتهای دامنه تعریف کنید (مثلاً پکیجهایی مثل
account
, inventory
).* اجتناب از ساختار تقلیدی MVC یا مدلهایی که ممکن است منجر به circular dependency شود.
---
5. شروع ساده و افزایش تدریجی ساختار
* اگر ایدهای ندارید، فقط با
go.mod
و main.go
شروع کنید؛ بعد با رشد پروژه، نیاز به طبقهبندی دقیقتر را تشخیص دهید. شروع مینیمال، کد قابل نگهداری را تسهیل میکند. ---
6. فایلهای مرتبط را کنار هم نگه دارید
* توابع مرتبط، typeها و handlerهای یک واحد منطقی را در فایلهای نزدیک یا مشابه قرار دهید؛ این کار خوانایی را بالا میبرد.
---
7. اندازه فایل مهم نیست... مگر نگهداری را دشوار کند
* فایلهای بزرگ ایرادی ندارند، تا وقتی که نگهداری آنها راحت باشد. لازم نیست برای چند فایل ساده، پکیج ایجاد کنید.
---
8. وقتی لازم نیست پکیج جدا نسازید
* از ایجاد پکیجهای کماهمیت یا بسیار جزئی خودداری کنید؛ مگر قصد reuse مجزا یا جداسازی واضح logic را داشته باشید.)
---
9. به علائم هشدار ساختار دقت کنید
اگر موارد زیر را دیدید، زمان بازبینی ساختار فرارسیده:
* مشکل در یافتن نقاط کد،
* تغییرات گسترده در بخشهای متفاوت،
* سخت شدن debug،
* وابستگی حلقوی یا پیچیدگی error handling.
---
💡 جمعبندی نهایی
* تأکید روی خوانایی، نگهداریپذیری و ساختار معقول.
* شروع از سادهترین حالت، حفظ نامگذاری استاندارد Go و اجتناب از ساختارهای پیچیده غیر idiomatic Go.
* اجازه دهید پروژه در طول زمان ساختار مناسب خودش را بیابد، نه طراحی اولیهی کاملاً دقیق.
❤4👍2
📝 نکات کاربردی درباره
1. چهار روش نوشتن مختلف
*
بسته به نوع دادهای که در اختیار دارید، میتوانید روش مناسب را استفاده کنید
2. نحوه ذخیرهسازی داخلی
این نوع از یک slice داخلی استفاده میکند که نوشتنها به صورت
3. استفادهی بهینه با
قبل از نوشتن با حجم بالا، بهتر است با
* اگر ظرفیت فعلی کافی باشد، گسترش اتفاق نمیافتد.
* اگر ظرفیت کافی نباشد، با فرمول
4. عملکرد
متد
### 5. هرگز یک Builder غیرصفر را کپی نکنید
کپی کردن یک `strings.Builder` که قبلاً نوشته شده باشد منجر به panic میشود:
فقط اشیاء صفر مقدار (بدون نوشتن) قابل کپی هستند
6. عدم پشتیبانی همزمانی (Concurrency)
7. پیادهسازی
رابط
---
⚡️ مثال استفاده
در این مثال:
* از
* با ترکیب
* قابلیت گرفتن طول و ظرفیت نیز وجود دارد.
|
strings.Builder
1. چهار روش نوشتن مختلف
strings.Builder
از چهار روش برای افزودن محتوا پشتیبانی میکند:*
Write([]byte)
, WriteByte(byte)
, WriteRune(rune)
, WriteString(string)
بسته به نوع دادهای که در اختیار دارید، میتوانید روش مناسب را استفاده کنید
2. نحوه ذخیرهسازی داخلی
این نوع از یک slice داخلی استفاده میکند که نوشتنها به صورت
append
در آن انجام میشوند. بنابراین عملکرد آن مشابه append روی slice است 3. استفادهی بهینه با
Grow(n)
قبل از نوشتن با حجم بالا، بهتر است با
Grow(n)
ظرفیت را از پیش افزایش دهید تا از realloc جلوگیری شود:* اگر ظرفیت فعلی کافی باشد، گسترش اتفاق نمیافتد.
* اگر ظرفیت کافی نباشد، با فرمول
current_capacity*2 + n
افزایش پیدا میکند 4. عملکرد
String()
متد
String()
بدون تخصیص حافظه اضافی، یک رشته جدید از buffer داخلی ایجاد میکند—با استفاده از `unsafe`، فقط اشارهگر را باز میگرداند ### 5. هرگز یک Builder غیرصفر را کپی نکنید
کپی کردن یک `strings.Builder` که قبلاً نوشته شده باشد منجر به panic میشود:
var b1 strings.Builder
b1.WriteString("ABC")
b2 := b1
b2.WriteString("DEF") // panic!
فقط اشیاء صفر مقدار (بدون نوشتن) قابل کپی هستند
6. عدم پشتیبانی همزمانی (Concurrency)
strings.Builder
ایمن برای استفاده همزمان از چند goroutine نیست؛ خواندن یا نوشتن همزمان میتواند منجر به نتایج غیرمنتظره شود 7. پیادهسازی
io.Writer
رابط
Write(p []byte) (int, error)
پیادهسازی شده است، بنابراین میتوانید از strings.Builder
به عنوان یک io.Writer
استفاده کنید—مثلاً logسازی، fmt.Fprintf و … ---
⚡️ مثال استفاده
package main
import (
"fmt"
"strings"
)
func main() {
var sb strings.Builder
sb.Grow(100)
sb.WriteString("Hello")
sb.WriteByte(' ')
sb.WriteRune('世')
sb.WriteString("界")
fmt.Println(sb.String()) // خروجی: "Hello 世界"
fmt.Printf("Len=%d, Cap=%d\n", sb.Len(), sb.Cap())
}
در این مثال:
* از
Grow(100)
برای کاهش realloc استفاده کردیم.* با ترکیب
WriteString
, WriteByte
, و WriteRune
یک رشته UTF‑8 ساختیم.* قابلیت گرفتن طول و ظرفیت نیز وجود دارد.
|
❤5👍2
چی هست fuzz testing؟
* در Go 1.18، fuzz testing بهصورت داخلی وارد stdlib شد**؛ ابزاری که بهطور خودکار ورودیهای تصادفی تولید کرده و تابع مورد نظر را تست میکند تا **Bugها و edge caseها را بیابد
* برخلاف تستهای واحد که ورودیهای مشخص دارند، fuzz با تکیه بر یک seed corpus (مثلاً تعدادی ورودی اولیه) شروع گرفته و بر اساس راهنمای پوشش کد تست را گسترش میدهد، مسیرهای جدید کد را کشف میکند و موارد جالبی تولید میکند که تستهای سنتی ممکن است پوشش ندهند
---
2. نحوه نوشتن fuzz test در Go
* تابع
*
*
---
3. مزایا و معایب
✅ مزایا:
* افزایش پوشش تست و کشف خطاهای نادیدهگرفتهشده: بهویژه برای parserها، handlers با JSON یا ورودی پیچیده
* سهولت استفاده: تست زیاد بدون نیاز به نوشتن دستی هزاران ورودی.
* هر بار موارد جالب کشفشده ذخیرهشده و قابل اجرای مجدد هستند
❌ معایب یا چالشها:
* نیاز به طراحی درست تابع تحت تست (مثلاً برگشت error برای ورودی نامعتبر مانند invalid UTF-8)
* زمانبر بودن تست: اجرای fuzz برای هزاران ورودی ممکن است زمان زیادی ببرد
* در مولفههای پیچیدهتر (مثلاً structهایی با فیلد private) ممکن است نیاز به ساخت custom generator باشد.
---
4. تجربه افراد و ابزارهای مکمل
* سیستمهایی مثل
* کتابخانههای property-based مانند
* جامعه توسعهدهندهها تجربههای بسیار مثبتی داشتهاند:
* در Go 1.18، fuzz testing بهصورت داخلی وارد stdlib شد**؛ ابزاری که بهطور خودکار ورودیهای تصادفی تولید کرده و تابع مورد نظر را تست میکند تا **Bugها و edge caseها را بیابد
* برخلاف تستهای واحد که ورودیهای مشخص دارند، fuzz با تکیه بر یک seed corpus (مثلاً تعدادی ورودی اولیه) شروع گرفته و بر اساس راهنمای پوشش کد تست را گسترش میدهد، مسیرهای جدید کد را کشف میکند و موارد جالبی تولید میکند که تستهای سنتی ممکن است پوشش ندهند
---
2. نحوه نوشتن fuzz test در Go
func FuzzReverse(f *testing.F) {
f.Add("abc") // seed اولیه
f.Add("bb")
f.Fuzz(func(t *testing.T, str string) {
rev1 := Reverse(str)
rev2 := Reverse(rev1)
if str != rev2 {
t.Errorf("fuzz test failed: %q became %q", str, rev1)
}
if utf8.ValidString(str) && !utf8.ValidString(rev1) {
t.Errorf("invalid utf-8 after reverse: %q", rev1)
}
})
}
* تابع
FuzzXXX
در فایل تست نوشته میشود؛*
f.Add(...)
ورودیهای اولیه را مشخص میکند (seed corpus)؛*
f.Fuzz(...)
تابع تست را با signature مشخص اجرا میکند و Go وظیفه دارد ورودیهای جدید را تولید و اجرا کند---
3. مزایا و معایب
✅ مزایا:
* افزایش پوشش تست و کشف خطاهای نادیدهگرفتهشده: بهویژه برای parserها، handlers با JSON یا ورودی پیچیده
* سهولت استفاده: تست زیاد بدون نیاز به نوشتن دستی هزاران ورودی.
* هر بار موارد جالب کشفشده ذخیرهشده و قابل اجرای مجدد هستند
❌ معایب یا چالشها:
* نیاز به طراحی درست تابع تحت تست (مثلاً برگشت error برای ورودی نامعتبر مانند invalid UTF-8)
* زمانبر بودن تست: اجرای fuzz برای هزاران ورودی ممکن است زمان زیادی ببرد
* در مولفههای پیچیدهتر (مثلاً structهایی با فیلد private) ممکن است نیاز به ساخت custom generator باشد.
---
4. تجربه افراد و ابزارهای مکمل
* سیستمهایی مثل
go-fuzz
(پیش از نسخه رسمی Go) برای fuzz کردن بستههای Go استفاده میشد و بسیار موثر بود* کتابخانههای property-based مانند
pgregory.net/rapid
گزینهی جایگزینی هستند که قابلیتهای پیشرفته توليد داده، مینیمالسازی خطاها و persistence را ارائه میدهند * جامعه توسعهدهندهها تجربههای بسیار مثبتی داشتهاند:
❤4
Forwarded from Software Engineer Labdon
🌟 ۵ استراتژی کلیدی برای دسترسی بالا (High Availability)
۱. 🍎 Load Balancing
توزیع هوشمند درخواستها به سرورهای مختلف با در نظر گرفتن معیارهایی مثل مصرف CPU، حافظه و زمان پاسخگویی. این کار از بارگذاری بیشازحد یک سرور جلوگیری کرده و تضمین دسترسی مناسب را فراهم میکند
۲. 🔁 Data Redundancy with Isolation
ایجاد نسخههای متعدد از دادهها در دیتاسنترها یا مناطق مختلف (AZ/Region) برای جلوگیری از توقف سرویس در صورت خرابی یک محل. تکنیکهایی مثل replication و توزیع داده استفاده میشود
۳. 🛠 Failover
راهاندازی خودکار سرویسهای پشتیبان (standby) که در صورت خرابی سرور اصلی، بدون وقفه بارکاری را ادامه دهند. این امکان از طریق load balancer، دیتابیس یا سرویسهای کاربردی قابل اجراست
۴. 📈 Auto Scaling
تنظیم خودکار مقیاس منابع در مواجهه با افزایش یا کاهش بار. منابع مانند VM، کانتینر یا فانکشن سرورلس به کلود یا سیستم مدیریت اختصاصی اضافه و حذف میشوند
۵. 🚦 Rate Limiting
اعمال محدودیت در تعداد درخواستهای دریافتی (مثلاً تعداد مشخص در هر ثانیه یا دقیقه) در لایههای مختلف مثل load balancer یا خود سرور. جلوگیری از overload سیستم و تضمین تجربه کاربری پایدار را ممکن میکند
---
🧭 چرا این روشها مهماند؟
* با ترکیب این استراتژیها میتونی سیستمت رو بهگونهای طراحی کنی که حتی در صورت خرابی یا حمله ناگهانی، ادامه بهکار دهد.
* هر مورد از این استراتژیها یک جنبهی خاص از پایداری مثل توزیع بار، حفاظت دادهها یا کنترل درخواست را پوشش میدهد.
* این اصول نمایانگر مفاهیمی مثل حذف Single Point of Failure، failover خودکار، کشش دینامیک و کنترل ترافیک هستند.
---
🧩 سایر رویکردها که ممکنه مفید باشن:
* Redundancy + Fault Tolerance: استفاده از سرورهای active-active یا active-passive در دادهسنترهای مختلف بههمراه clustering و heartbeat برای مانیتورینگ خودکار .
* Distributed Storage & Replication: برای پایداری داده و تحمل خرابی در نودهای جغرافیایی متعدد
* Monitoring, Health Checks, Graceful Degradation: پیادهسازی مانیتورینگ لحظهای، بررسی سلامت سرویس و ارائه fallback مناسب در شرایط بحرانی برای حفظ تجربه کاربری
---
✅ جمعبندی سریع
این پنج استراتژی (Load Balancing، Data Redundancy، Failover، Auto Scaling، Rate Limiting) پایهایترین اصول برای طراحی سیستمهای با High Availability هستند. با اجرای مناسب آنها میتونی سطح دسترسی بالا، مقاومت در برابر خطا و تجربهی بدون وقفهای برای کاربران فراهم کنی.
➖➖➖➖➖➖➖➖
https://t.me/addlist/QtXiQlynEJwzODBk
۱. 🍎 Load Balancing
توزیع هوشمند درخواستها به سرورهای مختلف با در نظر گرفتن معیارهایی مثل مصرف CPU، حافظه و زمان پاسخگویی. این کار از بارگذاری بیشازحد یک سرور جلوگیری کرده و تضمین دسترسی مناسب را فراهم میکند
۲. 🔁 Data Redundancy with Isolation
ایجاد نسخههای متعدد از دادهها در دیتاسنترها یا مناطق مختلف (AZ/Region) برای جلوگیری از توقف سرویس در صورت خرابی یک محل. تکنیکهایی مثل replication و توزیع داده استفاده میشود
۳. 🛠 Failover
راهاندازی خودکار سرویسهای پشتیبان (standby) که در صورت خرابی سرور اصلی، بدون وقفه بارکاری را ادامه دهند. این امکان از طریق load balancer، دیتابیس یا سرویسهای کاربردی قابل اجراست
۴. 📈 Auto Scaling
تنظیم خودکار مقیاس منابع در مواجهه با افزایش یا کاهش بار. منابع مانند VM، کانتینر یا فانکشن سرورلس به کلود یا سیستم مدیریت اختصاصی اضافه و حذف میشوند
۵. 🚦 Rate Limiting
اعمال محدودیت در تعداد درخواستهای دریافتی (مثلاً تعداد مشخص در هر ثانیه یا دقیقه) در لایههای مختلف مثل load balancer یا خود سرور. جلوگیری از overload سیستم و تضمین تجربه کاربری پایدار را ممکن میکند
---
🧭 چرا این روشها مهماند؟
* با ترکیب این استراتژیها میتونی سیستمت رو بهگونهای طراحی کنی که حتی در صورت خرابی یا حمله ناگهانی، ادامه بهکار دهد.
* هر مورد از این استراتژیها یک جنبهی خاص از پایداری مثل توزیع بار، حفاظت دادهها یا کنترل درخواست را پوشش میدهد.
* این اصول نمایانگر مفاهیمی مثل حذف Single Point of Failure، failover خودکار، کشش دینامیک و کنترل ترافیک هستند.
---
🧩 سایر رویکردها که ممکنه مفید باشن:
* Redundancy + Fault Tolerance: استفاده از سرورهای active-active یا active-passive در دادهسنترهای مختلف بههمراه clustering و heartbeat برای مانیتورینگ خودکار .
* Distributed Storage & Replication: برای پایداری داده و تحمل خرابی در نودهای جغرافیایی متعدد
* Monitoring, Health Checks, Graceful Degradation: پیادهسازی مانیتورینگ لحظهای، بررسی سلامت سرویس و ارائه fallback مناسب در شرایط بحرانی برای حفظ تجربه کاربری
---
✅ جمعبندی سریع
این پنج استراتژی (Load Balancing، Data Redundancy، Failover، Auto Scaling، Rate Limiting) پایهایترین اصول برای طراحی سیستمهای با High Availability هستند. با اجرای مناسب آنها میتونی سطح دسترسی بالا، مقاومت در برابر خطا و تجربهی بدون وقفهای برای کاربران فراهم کنی.
➖➖➖➖➖➖➖➖
https://t.me/addlist/QtXiQlynEJwzODBk
👍2❤1
🏗 مراحل کامپایل در زبان Go
کامپایلر Go شامل مراحل زیر هست:
1. Tokenizing (Lexical Analysis)
کد به اجزای کوچکتر مثل if, for, x, +, 123 تجزیه میشه.
این کار توسط lexer انجام میشه.
2. Parsing (Syntax Analysis)
از توکنها یک درخت نحوی یا AST (Abstract Syntax Tree) ساخته میشه.
مثلاً a + b به شکل درختی با + به عنوان ریشه و a و b به عنوان فرزندها تحلیل میشه.
3. Type Checking
بررسی میکنه که همه چیز از نظر نوع (type) درسته یا نه:
آیا a + b مجازه؟ (آیا a و b عدد هستن؟)
آیا تابعی با امضای درست فراخوانی شده؟
4. Intermediate Representation (IR)
کد به فرم میانی ترجمه میشه که خواندن و بهینهسازی روش راحتتره.
Go از فرم SSA (Static Single Assignment) استفاده میکنه (در مرحله بعد توضیح داده میشه).
5. SSA (Static Single Assignment)
در این مدل، هر متغیر فقط یکبار مقداردهی میشه.
این به کامپایلر کمک میکنه که راحتتر بهینهسازی انجام بده، مثلاً:
حذف کدهای مرده
inline کردن توابع
بهینهسازی حلقهها
6. Code Generation
در نهایت، از SSA کد ماشین تولید میشه (برای لینوکس/ویندوز/مک، معماری x86/ARM و…).
کامپایلر Go شامل مراحل زیر هست:
Source Code → Tokenizing → Parsing → AST → Type Checking → IR → SSA → Machine Code
1. Tokenizing (Lexical Analysis)
کد به اجزای کوچکتر مثل if, for, x, +, 123 تجزیه میشه.
این کار توسط lexer انجام میشه.
2. Parsing (Syntax Analysis)
از توکنها یک درخت نحوی یا AST (Abstract Syntax Tree) ساخته میشه.
مثلاً a + b به شکل درختی با + به عنوان ریشه و a و b به عنوان فرزندها تحلیل میشه.
3. Type Checking
بررسی میکنه که همه چیز از نظر نوع (type) درسته یا نه:
آیا a + b مجازه؟ (آیا a و b عدد هستن؟)
آیا تابعی با امضای درست فراخوانی شده؟
4. Intermediate Representation (IR)
کد به فرم میانی ترجمه میشه که خواندن و بهینهسازی روش راحتتره.
Go از فرم SSA (Static Single Assignment) استفاده میکنه (در مرحله بعد توضیح داده میشه).
5. SSA (Static Single Assignment)
در این مدل، هر متغیر فقط یکبار مقداردهی میشه.
این به کامپایلر کمک میکنه که راحتتر بهینهسازی انجام بده، مثلاً:
حذف کدهای مرده
inline کردن توابع
بهینهسازی حلقهها
6. Code Generation
در نهایت، از SSA کد ماشین تولید میشه (برای لینوکس/ویندوز/مک، معماری x86/ARM و…).
❤3👍2
Gopher Academy
🏗 مراحل کامپایل در زبان Go کامپایلر Go شامل مراحل زیر هست: Source Code → Tokenizing → Parsing → AST → Type Checking → IR → SSA → Machine Code 1. Tokenizing (Lexical Analysis) کد به اجزای کوچکتر مثل if, for, x, +, 123 تجزیه میشه. این کار توسط lexer انجام…
🌀 چرا Go سریع کامپایل میکنه؟
* کامپایلر Go فایلها رو به صورت مستقل کامپایل میکنه (no header files مثل C/C++)
* importها فقط به شکل explicit مجاز هستن (هیچ چیزی مخفیانه load نمیشه)
* فرم SSA بسیار بهینه و کمحجم هست
* استفاده از حافظهی کم در زمان build
---
🧪 مثال عملی (build داخلی Go)
اگر این کد رو ذخیره کنی:
و بعد دستور زیر رو بزنی:
میبینی که این مراحل اتفاق میافته:
---
🧰 ابزار مفید:
اگه بخوای دقیقتر رفتار کامپایلر رو ببینی:
1. فقط کامپایل کن بدون لینک:
این دستور خروجی اسمبلی (Assembly) کد رو نشون میده.
2. آنالیز باینری نهایی:
➖➖➖➖➖➖➖➖
https://t.me/addlist/QtXiQlynEJwzODBk
* کامپایلر Go فایلها رو به صورت مستقل کامپایل میکنه (no header files مثل C/C++)
* importها فقط به شکل explicit مجاز هستن (هیچ چیزی مخفیانه load نمیشه)
* فرم SSA بسیار بهینه و کمحجم هست
* استفاده از حافظهی کم در زمان build
---
🧪 مثال عملی (build داخلی Go)
اگر این کد رو ذخیره کنی:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
و بعد دستور زیر رو بزنی:
go build -x main.go
میبینی که این مراحل اتفاق میافته:
WORK=/tmp/go-build123456
mkdir -p $WORK/b001/
compile -> main.a
link -> main binary
---
🧰 ابزار مفید:
go tool compile
و go tool objdump
اگه بخوای دقیقتر رفتار کامپایلر رو ببینی:
1. فقط کامپایل کن بدون لینک:
go tool compile -S main.go
این دستور خروجی اسمبلی (Assembly) کد رو نشون میده.
2. آنالیز باینری نهایی:
go tool objdump ./main
➖➖➖➖➖➖➖➖
https://t.me/addlist/QtXiQlynEJwzODBk
👍2🔥1🍾1