Forwarded from Software Engineer Labdon
📣 هش SHA 256 چگونه کار میکند؟
این وبسایت قدم به قدم فرآیند هش کردن رشته با الگوریتم Sha256 را بصورت گرافیکی نشان میدهد:
🔗 https://sha256algorithm.com/
🔹🔹🔹🔹🔹
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
این وبسایت قدم به قدم فرآیند هش کردن رشته با الگوریتم Sha256 را بصورت گرافیکی نشان میدهد:
🔗 https://sha256algorithm.com/
🔹🔹🔹🔹🔹
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
❤1🔥1👏1
اگه یه میلیون کار داشته باشی و بخوای همزمان اجراشون کنی، ولی فقط 8 تا CPU داری، چهجوری بهینهترین حالت رو پیدا میکنی؟
تو گولنگ، گوروتینها خیلی سبک هستن. میتونی هزار تا، ده هزار تا، یا حتی بیشتر گوروتین همزمان اجرا کنی. ولی وقتی تعداد کارهات خیلی زیاده (مثلاً یه میلیون)، دیگه تعداد CPUها محدودیت اصلی میشه و نمیصرفه حافظه رو با صدها هزار گوروتین که همزمان نمیتونن اجرا بشن، هدر بدی.
یه راه خفن برای کنترل این داستان استفاده از Semaphore هست که میتونی تعداد گوروتینهای در حال اجرا رو محدود کنی.
حالا چطور کار میکنه؟
1. یه کانال با ظرفیت مشخص (N) درست میکنی که این ظرفیت میشه تعداد گوروتینهای همزمانی که میخوای اجرا بشه.
2. کانال رو با N تا "توکن" (هرچیزی مثل عدد) پر میکنی.
3. هر گوروتین قبل از اجرا باید یه توکن از کانال بگیره و وقتی کارش تموم شد توکن رو برمیگردونه.
4. اگه توکن نباشه گوروتین منتظر میمونه تا یکی آزاد بشه.
این تصویر یه مثال ساده با N=2 هست.
| <Mohammad Abdorrahmani/>
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
تو گولنگ، گوروتینها خیلی سبک هستن. میتونی هزار تا، ده هزار تا، یا حتی بیشتر گوروتین همزمان اجرا کنی. ولی وقتی تعداد کارهات خیلی زیاده (مثلاً یه میلیون)، دیگه تعداد CPUها محدودیت اصلی میشه و نمیصرفه حافظه رو با صدها هزار گوروتین که همزمان نمیتونن اجرا بشن، هدر بدی.
یه راه خفن برای کنترل این داستان استفاده از Semaphore هست که میتونی تعداد گوروتینهای در حال اجرا رو محدود کنی.
حالا چطور کار میکنه؟
1. یه کانال با ظرفیت مشخص (N) درست میکنی که این ظرفیت میشه تعداد گوروتینهای همزمانی که میخوای اجرا بشه.
2. کانال رو با N تا "توکن" (هرچیزی مثل عدد) پر میکنی.
3. هر گوروتین قبل از اجرا باید یه توکن از کانال بگیره و وقتی کارش تموم شد توکن رو برمیگردونه.
4. اگه توکن نباشه گوروتین منتظر میمونه تا یکی آزاد بشه.
این تصویر یه مثال ساده با N=2 هست.
| <Mohammad Abdorrahmani/>
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍11🍾4🔥1💅1
رفتار متغیرهای حلقه در Go
در Go، وقتی یک حلقه مانند
مثال مشکلساز:
فرض کنید کدی شبیه به زیر داریم:
مشکل چیست؟
1. متغیر
2. goroutineها به دلیل اجرای همزمان (asynchronous execution) ممکن است با تأخیر اجرا شوند.
3. زمانی که goroutine اجرا میشود، ممکن است مقدار
نتیجه
تمام goroutineها ممکن است به جای مقادیر مختلف، فقط مقدار آخرین آیتم حلقه را چاپ کنند.
---
راهحل: ایجاد کپی مستقل از متغیر حلقه
برای جلوگیری از این مشکل، باید مطمئن شویم که هر goroutine به یک کپی مستقل از مقدار
اصلاح کد:
تابع ناشناس با پارامتر
یک روش دیگر برای ایجاد کپی، ارسال مقدار متغیر حلقه به تابع ناشناس به صورت پارامتر است.
کد شما:
1. `m` به عنوان آرگومان: متغیر
2. کپی مستقل: حالا تابع ناشناس داخل goroutine به یک کپی مجزا و مستقل از مقدار متغیر
3. مشکل حل میشود: هر goroutine مقدار درست متغیر مربوط به تکرار خودش را پردازش میکند.
---
چرا این کار به جلوگیری از مشکلات همزمانی کمک میکند؟
مشکلات همزمانی زمانی رخ میدهند که چندین goroutine به صورت همزمان به یک منبع مشترک دسترسی داشته باشند.
در اینجا:
- اگر از متغیر حلقه
- با ایجاد کپی (از طریق
- این جداسازی تضمین میکند که مقدار هر goroutine به حلقه وابسته نیست و دیگر دچار تداخل نخواهد شد.
---
مثال عملی
قبل از اصلاح:
#### بعد از اصلاح:
---
جمعبندی
خط
1. یک کپی مستقل از مقدار
2. این کپی را به تابع ناشناس ارسال میکند.
3. به جلوگیری از مشکلات ناشی از استفاده همزمان از متغیرهای حلقه در goroutineها کمک میکند.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
در Go، وقتی یک حلقه مانند
for
تعریف میشود، متغیرهای حلقه (result
در این مثال) به صورت متغیر مشترک (shared) در حافظه استفاده میشوند. این بدان معناست که همه goroutineها به یک مرجع (reference) از این متغیر دسترسی دارند، نه به یک کپی از مقدار فعلی آن.مثال مشکلساز:
فرض کنید کدی شبیه به زیر داریم:
for _, result := range collections {
go func() {
fmt.Println(result.Title) // از result استفاده میشود
}()
}
مشکل چیست؟
1. متغیر
result
به طور مداوم در طول حلقه تغییر میکند.2. goroutineها به دلیل اجرای همزمان (asynchronous execution) ممکن است با تأخیر اجرا شوند.
3. زمانی که goroutine اجرا میشود، ممکن است مقدار
result
تغییر کرده باشد و goroutine به مقدار آخرین تغییر یافته دسترسی داشته باشد، نه مقداری که هنگام تعریف goroutine موجود بود.نتیجه
تمام goroutineها ممکن است به جای مقادیر مختلف، فقط مقدار آخرین آیتم حلقه را چاپ کنند.
---
راهحل: ایجاد کپی مستقل از متغیر حلقه
برای جلوگیری از این مشکل، باید مطمئن شویم که هر goroutine به یک کپی مستقل از مقدار
result
دسترسی دارد. این کار را با تعریف یک متغیر محلی جدید در هر تکرار حلقه انجام میدهیم.اصلاح کد:
for _, result := range collections {
m := result // یک کپی از `result` ایجاد میکنیم
go func() {
fmt.Println(m.Title) // حالا goroutine به کپی مستقل دسترسی دارد
}()
}
تابع ناشناس با پارامتر
یک روش دیگر برای ایجاد کپی، ارسال مقدار متغیر حلقه به تابع ناشناس به صورت پارامتر است.
کد شما:
go func(m articleapp.NewArticle) {
// کد داخل goroutine
}(m)
1. `m` به عنوان آرگومان: متغیر
result
کپی شده و به عنوان پارامتر m
به تابع ناشناس ارسال میشود.2. کپی مستقل: حالا تابع ناشناس داخل goroutine به یک کپی مجزا و مستقل از مقدار متغیر
result
دسترسی دارد.3. مشکل حل میشود: هر goroutine مقدار درست متغیر مربوط به تکرار خودش را پردازش میکند.
---
چرا این کار به جلوگیری از مشکلات همزمانی کمک میکند؟
مشکلات همزمانی زمانی رخ میدهند که چندین goroutine به صورت همزمان به یک منبع مشترک دسترسی داشته باشند.
در اینجا:
- اگر از متغیر حلقه
result
مستقیماً استفاده شود، goroutineها به یک مرجع مشترک از این متغیر دسترسی دارند.- با ایجاد کپی (از طریق
m
) و ارسال آن به تابع ناشناس، هر goroutine یک نسخه مستقل از مقدار را دارد.- این جداسازی تضمین میکند که مقدار هر goroutine به حلقه وابسته نیست و دیگر دچار تداخل نخواهد شد.
---
مثال عملی
قبل از اصلاح:
collections := []articleapp.NewArticle{
{Title: "A"}, {Title: "B"}, {Title: "C"},
}
for _, result := range collections {
go func() {
fmt.Println(result.Title) // ممکن است همه goroutineها مقدار "C" را چاپ کنند
}()
}
#### بعد از اصلاح:
for _, result := range collections {
go func(m articleapp.NewArticle) {
fmt.Println(m.Title) // هر goroutine مقدار درست را چاپ میکند
}(result)
}
---
جمعبندی
خط
(m)
:1. یک کپی مستقل از مقدار
result
ایجاد میکند.2. این کپی را به تابع ناشناس ارسال میکند.
3. به جلوگیری از مشکلات ناشی از استفاده همزمان از متغیرهای حلقه در goroutineها کمک میکند.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍7
در فایل go.mod، toolchain برای تعیین نسخه ابزار Go (مانند go و ابزارهای مرتبط با آن) استفاده میشود. این ویژگی به شما امکان میدهد تا پروژه را به نسخه خاصی از ابزار Go مقید کنید، حتی اگر نسخه پیشفرض go در سیستم شما متفاوت باشد.
نحوه استفاده از toolchain
اگر در فایل go.mod خطی به شکل زیر مشاهده کنید:
این به این معنی است که پروژه نیازمند نسخه go1.20 است و باید از این نسخه استفاده شود، صرفنظر از نسخه Go نصبشده روی سیستم.
کاربردهای اصلی toolchain
اطمینان از سازگاری نسخه Go
با استفاده از toolchain، میتوانید مطمئن شوید که همه توسعهدهندگان و محیطهای CI/CD از یک نسخه خاص از ابزار Go استفاده میکنند.
مدیریت نسخهها در پروژههای تیمی
این ویژگی تضمین میکند که مشکلات ناشی از ناسازگاری نسخهها (مانند تغییرات در syntax یا behavior) به حداقل برسند.
ساخت خودکار با نسخه مشخص
اگر نسخهای که در toolchain تعریف شده، روی سیستم نصب نشده باشد، ابزار Go بهطور خودکار آن را از وبسایت Go دریافت و نصب میکند.
نکته مهم درباره toolchain
این قابلیت با ابزار Go نسخه 1.21 و بالاتر در دسترس است. اگر نسخه Go قدیمیتری دارید، خط مربوط به toolchain در فایل go.mod نادیده گرفته خواهد شد.
toolchain مستقل از دستور go در فایل go.mod عمل میکند. دستور go نسخه حداقل زبان Go برای کدنویسی و بیلد کردن را مشخص میکند:
مثالی کامل از go.mod
go 1.20: نسخه حداقل برای ویژگیهای زبان Go.
toolchain go1.20: نسخه ابزار Go که پروژه باید با آن ساخته شود.
جمعبندی
toolchain یک ابزار قوی برای مدیریت و تثبیت نسخه ابزار Go در پروژههای بزرگ است. این قابلیت بهخصوص در محیطهای توسعه تیمی و پروژههایی که وابستگی شدیدی به نسخه خاصی از Go دارند، بسیار مفید است.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
نحوه استفاده از toolchain
اگر در فایل go.mod خطی به شکل زیر مشاهده کنید:
toolchain go1.20
این به این معنی است که پروژه نیازمند نسخه go1.20 است و باید از این نسخه استفاده شود، صرفنظر از نسخه Go نصبشده روی سیستم.
کاربردهای اصلی toolchain
اطمینان از سازگاری نسخه Go
با استفاده از toolchain، میتوانید مطمئن شوید که همه توسعهدهندگان و محیطهای CI/CD از یک نسخه خاص از ابزار Go استفاده میکنند.
مدیریت نسخهها در پروژههای تیمی
این ویژگی تضمین میکند که مشکلات ناشی از ناسازگاری نسخهها (مانند تغییرات در syntax یا behavior) به حداقل برسند.
ساخت خودکار با نسخه مشخص
اگر نسخهای که در toolchain تعریف شده، روی سیستم نصب نشده باشد، ابزار Go بهطور خودکار آن را از وبسایت Go دریافت و نصب میکند.
نکته مهم درباره toolchain
این قابلیت با ابزار Go نسخه 1.21 و بالاتر در دسترس است. اگر نسخه Go قدیمیتری دارید، خط مربوط به toolchain در فایل go.mod نادیده گرفته خواهد شد.
toolchain مستقل از دستور go در فایل go.mod عمل میکند. دستور go نسخه حداقل زبان Go برای کدنویسی و بیلد کردن را مشخص میکند:
go 1.20
مثالی کامل از go.mod
module example.com/myproject go 1.20 toolchain go1.20 require ( github.com/some/library v1.2.3 )
go 1.20: نسخه حداقل برای ویژگیهای زبان Go.
toolchain go1.20: نسخه ابزار Go که پروژه باید با آن ساخته شود.
جمعبندی
toolchain یک ابزار قوی برای مدیریت و تثبیت نسخه ابزار Go در پروژههای بزرگ است. این قابلیت بهخصوص در محیطهای توسعه تیمی و پروژههایی که وابستگی شدیدی به نسخه خاصی از Go دارند، بسیار مفید است.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍2🥰1🎉1
Gopher Academy
در فایل go.mod، toolchain برای تعیین نسخه ابزار Go (مانند go و ابزارهای مرتبط با آن) استفاده میشود. این ویژگی به شما امکان میدهد تا پروژه را به نسخه خاصی از ابزار Go مقید کنید، حتی اگر نسخه پیشفرض go در سیستم شما متفاوت باشد. نحوه استفاده از toolchain اگر…
در فایل go.mod، دو دستور go و toolchain نقشهای متفاوتی دارند، هرچند هر دو به نسخههای Go مرتبط هستند. در ادامه به تفاوتهای این دو دستور میپردازیم:
1. go: مشخص کردن نسخه حداقل زبان Go
این دستور نشاندهنده نسخه حداقل زبان Go است که پروژه باید با آن سازگار باشد. به عبارتی، این مقدار مشخص میکند که کدام نسخه از ویژگیهای زبان و استاندارد Go برای کامپایل و اجرای پروژه لازم است.
کاربرد:
تعیین نسخه حداقل زبان Go که برای این پروژه لازم است.
اگر نسخه ابزار Go نصبشده روی سیستم از این مقدار کمتر باشد، ابزار Go اجازه بیلد (build) یا اجرای پروژه را نمیدهد.
این دستور به طور مستقیم بر رفتار زبان و کتابخانههای استاندارد تأثیر میگذارد.
مثال:
ویژگیهای زبان و کتابخانههای استاندارد Go 1.20 به بالا در دسترس هستند.
اگر نسخه Go نصبشده روی سیستم از 1.20 کمتر باشد، هنگام اجرای دستورات go build یا go run خطا خواهید گرفت.
2. toolchain: تعیین نسخه ابزار Go
این دستور که در Go 1.21 معرفی شده، نسخهای از ابزار Go (Go Toolchain) را مشخص میکند که پروژه باید از آن استفاده کند. ابزار Go شامل مواردی مانند go build, go run, go mod, و غیره است.
کاربرد:
مجبور کردن سیستم یا محیط CI/CD به استفاده از نسخه مشخص ابزار Go، صرفنظر از نسخه نصبشده روی سیستم.
در صورت نبود نسخه مشخصشده از ابزار Go، به طور خودکار آن نسخه دانلود و نصب میشود.
مثال:
حتی اگر نسخه go روی سیستم شما 1.19 باشد، ابزار Go نسخه 1.20 را دانلود و استفاده میکند.
این خط تضمین میکند که تمام ابزارهای مرتبط با Go (کامپایلر، مدیریت ماژولها، و غیره) از نسخه خاصی پیروی کنند.
تفاوتهای اصلی
ویژگیgotoolchainهدفنسخه حداقل زبان Goنسخه ابزار Go (Go Toolchain)اثرگذاریروی ویژگیهای زبان و استانداردهاروی ابزارهای مرتبط با Goزمان معرفیقدیمی (از ابتدای Go Modules)جدید (از Go 1.21 به بعد)رفتار در نبود نسخهخطا میدهدنسخه مناسب را دانلود و استفاده میکندتأثیر بر ساخت پروژهفقط بررسی زبان و استانداردهاتعیین دقیق نسخه ابزار برای کل فرآیند
چرا از هر دو استفاده کنیم؟
go: برای اطمینان از این که کد با نسخه خاصی از زبان سازگار است.
toolchain: برای تضمین این که ابزارها و محیط ساخت دقیقاً از نسخه خاصی استفاده کنند.
مثال ترکیبی
زبان Go باید حداقل 1.20 باشد (برای ویژگیهای زبان و استانداردها).
ابزارهای مرتبط با Go باید از نسخه 1.21 استفاده کنند (حتی اگر نسخه نصبشده 1.20 باشد، نسخه 1.21 دانلود و استفاده میشود).
نتیجهگیری
go برای تعیین حداقل سازگاری زبان Go است.
toolchain برای کنترل نسخه ابزار Go در محیطهای مختلف به کار میرود.
ترکیب این دو، کنترل دقیقتری بر محیط توسعه و اجرای پروژه فراهم میکند.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
1. go: مشخص کردن نسخه حداقل زبان Go
این دستور نشاندهنده نسخه حداقل زبان Go است که پروژه باید با آن سازگار باشد. به عبارتی، این مقدار مشخص میکند که کدام نسخه از ویژگیهای زبان و استاندارد Go برای کامپایل و اجرای پروژه لازم است.
کاربرد:
تعیین نسخه حداقل زبان Go که برای این پروژه لازم است.
اگر نسخه ابزار Go نصبشده روی سیستم از این مقدار کمتر باشد، ابزار Go اجازه بیلد (build) یا اجرای پروژه را نمیدهد.
این دستور به طور مستقیم بر رفتار زبان و کتابخانههای استاندارد تأثیر میگذارد.
مثال:
go 1.20
ویژگیهای زبان و کتابخانههای استاندارد Go 1.20 به بالا در دسترس هستند.
اگر نسخه Go نصبشده روی سیستم از 1.20 کمتر باشد، هنگام اجرای دستورات go build یا go run خطا خواهید گرفت.
2. toolchain: تعیین نسخه ابزار Go
این دستور که در Go 1.21 معرفی شده، نسخهای از ابزار Go (Go Toolchain) را مشخص میکند که پروژه باید از آن استفاده کند. ابزار Go شامل مواردی مانند go build, go run, go mod, و غیره است.
کاربرد:
مجبور کردن سیستم یا محیط CI/CD به استفاده از نسخه مشخص ابزار Go، صرفنظر از نسخه نصبشده روی سیستم.
در صورت نبود نسخه مشخصشده از ابزار Go، به طور خودکار آن نسخه دانلود و نصب میشود.
مثال:
toolchain go1.20
حتی اگر نسخه go روی سیستم شما 1.19 باشد، ابزار Go نسخه 1.20 را دانلود و استفاده میکند.
این خط تضمین میکند که تمام ابزارهای مرتبط با Go (کامپایلر، مدیریت ماژولها، و غیره) از نسخه خاصی پیروی کنند.
تفاوتهای اصلی
ویژگیgotoolchainهدفنسخه حداقل زبان Goنسخه ابزار Go (Go Toolchain)اثرگذاریروی ویژگیهای زبان و استانداردهاروی ابزارهای مرتبط با Goزمان معرفیقدیمی (از ابتدای Go Modules)جدید (از Go 1.21 به بعد)رفتار در نبود نسخهخطا میدهدنسخه مناسب را دانلود و استفاده میکندتأثیر بر ساخت پروژهفقط بررسی زبان و استانداردهاتعیین دقیق نسخه ابزار برای کل فرآیند
چرا از هر دو استفاده کنیم؟
go: برای اطمینان از این که کد با نسخه خاصی از زبان سازگار است.
toolchain: برای تضمین این که ابزارها و محیط ساخت دقیقاً از نسخه خاصی استفاده کنند.
مثال ترکیبی
module example.com/myproject go 1.20 // حداقل نسخه زبان Go toolchain go1.21 // نسخه ابزار Go
زبان Go باید حداقل 1.20 باشد (برای ویژگیهای زبان و استانداردها).
ابزارهای مرتبط با Go باید از نسخه 1.21 استفاده کنند (حتی اگر نسخه نصبشده 1.20 باشد، نسخه 1.21 دانلود و استفاده میشود).
نتیجهگیری
go برای تعیین حداقل سازگاری زبان Go است.
toolchain برای کنترل نسخه ابزار Go در محیطهای مختلف به کار میرود.
ترکیب این دو، کنترل دقیقتری بر محیط توسعه و اجرای پروژه فراهم میکند.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍4👏1
Forwarded from Bardia & Erfan
درود به همگی چند ماه پیش تصمیم گرفتم توی مواردی که خیلی باهاش سروکار دارم نمونه سوالتش رو از بعضی سایت ها و یا استک اور فلو بهش برخوردم رو توی ریپوهای زیر جداگانه جمع آوری کنم
اگر دوس داشتید به اشتراک بزارید و حمایت و مشارکت کنید
🎯- نمونه سوالات مصاحبه ای گیت
https://github.com/mrbardia72/git-Interview-Questions-And-Answers
🎯- نمونه سوالات مصاحبه ای گولنگ
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers
🎯- نمونه سوالات مصاحبه ای دیتابیس
https://github.com/mrbardia72/db-Interview-Questions-and-Answers
🎯- نمونه سوالات مصاحبه ای داکر
https://github.com/mrbardia72/docker-Interview-Questions-and-Answers
🎯- نمونه سوالات مصاحبه ای والت
https://github.com/mrbardia72/vault-Interview-Questions-and-Answers
👇👇join👇👇
https://t.me/addlist/KpzXaiSpKENkMGM0
اگر دوس داشتید به اشتراک بزارید و حمایت و مشارکت کنید
🎯- نمونه سوالات مصاحبه ای گیت
https://github.com/mrbardia72/git-Interview-Questions-And-Answers
🎯- نمونه سوالات مصاحبه ای گولنگ
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers
🎯- نمونه سوالات مصاحبه ای دیتابیس
https://github.com/mrbardia72/db-Interview-Questions-and-Answers
🎯- نمونه سوالات مصاحبه ای داکر
https://github.com/mrbardia72/docker-Interview-Questions-and-Answers
🎯- نمونه سوالات مصاحبه ای والت
https://github.com/mrbardia72/vault-Interview-Questions-and-Answers
👇👇join👇👇
https://t.me/addlist/KpzXaiSpKENkMGM0
در Go، تفاوت بین `size` و `capacity` در مورد ساختارهایی مانند آرایهها و اسلایسها این است:
1. Size (طول یا `len`):
- نشاندهنده تعداد عناصر فعلی موجود در یک اسلایس یا آرایه است.
- با تابع
- همیشه برابر با تعداد عناصر پر شدهی اسلایس یا آرایه است.
2. Capacity (ظرفیت یا `cap`):
- نشاندهنده حداکثر تعداد عناصری است که یک اسلایس میتواند نگه دارد بدون نیاز به تخصیص دوباره حافظه.
- با تابع
- برای اسلایسها ممکن است بزرگتر از
### مثال:
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
1. Size (طول یا `len`):
- نشاندهنده تعداد عناصر فعلی موجود در یک اسلایس یا آرایه است.
- با تابع
len()
قابل دسترسی است.- همیشه برابر با تعداد عناصر پر شدهی اسلایس یا آرایه است.
2. Capacity (ظرفیت یا `cap`):
- نشاندهنده حداکثر تعداد عناصری است که یک اسلایس میتواند نگه دارد بدون نیاز به تخصیص دوباره حافظه.
- با تابع
cap()
قابل دسترسی است.- برای اسلایسها ممکن است بزرگتر از
len
باشد.### مثال:
s := make([]int, 3, 5) // اسلایس با طول 3 و ظرفیت 5
fmt.Println(len(s)) // 3
fmt.Println(cap(s)) // 5
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
❤3🙏1
Gopher Academy
در Go، تفاوت بین `size` و `capacity` در مورد ساختارهایی مانند آرایهها و اسلایسها این است: 1. Size (طول یا `len`): - نشاندهنده تعداد عناصر فعلی موجود در یک اسلایس یا آرایه است. - با تابع len() قابل دسترسی است. - همیشه برابر با تعداد عناصر پر شدهی…
اگر طول (size) یک اسلایس در Go بیشتر از ظرفیت (
این عملیات میتواند هزینهبر باشد، زیرا شامل تخصیص مجدد و کپی دادهها است. به همین دلیل مدیریت ظرفیت مناسب برای بهینهسازی عملکرد اهمیت دارد.
### مثال:
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
cap
) آن شود، Go بهطور خودکار یک حافظه جدید با ظرفیت بزرگتر تخصیص میدهد. سپس عناصر قدیمی را به حافظه جدید منتقل کرده و عنصر جدید را اضافه میکند.این عملیات میتواند هزینهبر باشد، زیرا شامل تخصیص مجدد و کپی دادهها است. به همین دلیل مدیریت ظرفیت مناسب برای بهینهسازی عملکرد اهمیت دارد.
### مثال:
s := make([]int, 3, 5)
s = append(s, 1, 2, 3) // ظرفیت پر میشود
s = append(s, 4) // ظرفیت بیشتر میشود (افزایش خودکار ظرفیت)
fmt.Println(len(s)) // 7
fmt.Println(cap(s)) // 10 (ممکن است مقدار جدید متفاوت باشد)
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍2🔥2🍓2
Gopher Academy
اگر طول (size) یک اسلایس در Go بیشتر از ظرفیت (cap) آن شود، Go بهطور خودکار یک حافظه جدید با ظرفیت بزرگتر تخصیص میدهد. سپس عناصر قدیمی را به حافظه جدید منتقل کرده و عنصر جدید را اضافه میکند. این عملیات میتواند هزینهبر باشد، زیرا شامل تخصیص مجدد و کپی…
در Go، اگر تعداد عناصر در یک اسلایس از مقدار ظرفیت فعلی (
### مثال:
نحوه افزایش ظرفیت ممکن است بهصورت دقیق به پیادهسازی داخلی Go وابسته باشد.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
cap
) بیشتر شود، حافظه بیشتری به آن تخصیص داده میشود. الگوریتم تخصیص ظرفیت معمولاً بهصورت نمایی است (یعنی دو برابر میشود). این کار برای کاهش تعداد دفعات تخصیص مجدد حافظه انجام میشود و به بهبود کارایی کمک میکند.### مثال:
s := make([]int, 0, 2) // ظرفیت اولیه 2
fmt.Println(len(s), cap(s)) // طول 0، ظرفیت 2
s = append(s, 1, 2, 3) // نیاز به افزایش ظرفیت
fmt.Println(len(s), cap(s)) // طول 3، ظرفیت 4 (دو برابر قبلی)
نحوه افزایش ظرفیت ممکن است بهصورت دقیق به پیادهسازی داخلی Go وابسته باشد.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
❤3👍3🙏1
Forwarded from Software Engineer Labdon
توافق روی نام گذاری ها از نون شب واجب تره!!
یه جمله جالب توی کتاب clean code دیدم که نوشته بود، زمانی که میخواید توابع یا متغیرهاتون رو نامگذاری کنید اون قدر حساسیت به خرج بدید که انگار دارید برای یک نوزاد تازه به دنیا اومده اسم انتخاب میکنید.
یک نکته که داخل تیم هم خیلی مهمه اینه که برای یک مفهوم، از چند ورب مختلف استفاده نشه. مثلا برای ایجاد کردن فرضا محصول میشه همه ورب های add, create, insert, make, ... رو استفاده کرد. برای اینکه ابهام و سردرگمی پیش نیاد همیشه سعی کنید توی پروژتون برای همه entity ها از یک ورب یکسان استفاده کنید و این رو توی تیمتون هم باهم توافق کنید که همه از اون ورب استفاده کنن.
این مساله به ظاهر کوچیک خیلی خیلی مهمه لطفا رعایت کنید.
| <Pouya Farshidnia/>
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
یه جمله جالب توی کتاب clean code دیدم که نوشته بود، زمانی که میخواید توابع یا متغیرهاتون رو نامگذاری کنید اون قدر حساسیت به خرج بدید که انگار دارید برای یک نوزاد تازه به دنیا اومده اسم انتخاب میکنید.
یک نکته که داخل تیم هم خیلی مهمه اینه که برای یک مفهوم، از چند ورب مختلف استفاده نشه. مثلا برای ایجاد کردن فرضا محصول میشه همه ورب های add, create, insert, make, ... رو استفاده کرد. برای اینکه ابهام و سردرگمی پیش نیاد همیشه سعی کنید توی پروژتون برای همه entity ها از یک ورب یکسان استفاده کنید و این رو توی تیمتون هم باهم توافق کنید که همه از اون ورب استفاده کنن.
این مساله به ظاهر کوچیک خیلی خیلی مهمه لطفا رعایت کنید.
| <Pouya Farshidnia/>
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍9❤2🍾2⚡1
🔵 عنوان مقاله
How I Program with LLMs
🟢 خلاصه مقاله:
در این مقاله، یکی از بنیانگذاران Tailscale نظرات خود را در مورد روشهای مدرن نوشتن کد Go با استفاده از تکنیکهای متعددی که توسط مدلهای زبان بزرگ (LLM) پشتیبانی میشوند، به اشتراک میگذارد. او همچنین از یک پروژه جدید خبر میدهد که یک 'محیط بازی Go' مبتنی بر LLM است که در دست کار است. این ابزار جدید به توسعهدهندگان این امکان را میدهد تا کدهای Go خود را با توانائیهای پیشرفته LLM تست و اجرا کنند، که میتواند فرآیند توسعه را بهبود ببخشد و کارایی برنامهنویسی با Go را افزایش دهد. این 'محیط بازی Go' که به احتمال زیاد شامل امکاناتی برای آموزش و توسعه مهارتهای کدنویسی در بین توسعهدهندگان است، قصد دارد جامعه بزرگی از توسعهدهندگان Go را به خود جلب کند و روند برنامهنویسی با Go را متحول کند.
🟣لینک مقاله:
https://golangweekly.com/link/163965/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How I Program with LLMs
🟢 خلاصه مقاله:
در این مقاله، یکی از بنیانگذاران Tailscale نظرات خود را در مورد روشهای مدرن نوشتن کد Go با استفاده از تکنیکهای متعددی که توسط مدلهای زبان بزرگ (LLM) پشتیبانی میشوند، به اشتراک میگذارد. او همچنین از یک پروژه جدید خبر میدهد که یک 'محیط بازی Go' مبتنی بر LLM است که در دست کار است. این ابزار جدید به توسعهدهندگان این امکان را میدهد تا کدهای Go خود را با توانائیهای پیشرفته LLM تست و اجرا کنند، که میتواند فرآیند توسعه را بهبود ببخشد و کارایی برنامهنویسی با Go را افزایش دهد. این 'محیط بازی Go' که به احتمال زیاد شامل امکاناتی برای آموزش و توسعه مهارتهای کدنویسی در بین توسعهدهندگان است، قصد دارد جامعه بزرگی از توسعهدهندگان Go را به خود جلب کند و روند برنامهنویسی با Go را متحول کند.
🟣لینک مقاله:
https://golangweekly.com/link/163965/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍6
🔵 عنوان مقاله
betteralign 0.6: Make Your Programs Use Less Memory.. Maybe
🟢 خلاصه مقاله:
مقالهای که مورد بحث قرار گرفته، ابزاری را شرح میدهد که برای شناسایی ساختارهای دادهای (structs) در زبان برنامهنویسی Go طراحی شده است. این ابزار، نسخهای تغییر یافته از ابزار fieldalignment استاندارد Go میباشد. تفاوت اصلی آن در این است که فایلهای تولید شده یا فایلهای آزمایشی را نادیده میگیرد، همچنین از بررسی ساختارهای دادهای که دارای فیلدهای ناشناخته یا بدون نام هستند خودداری میکند. به علاوه، این ابزار نظرات موجود در کد را حذف نکرده و دارای بهبودهایی در تجربه توسعهدهندگان (DX improvements) است. هدف اصلی از این ابزار، کمک به برنامهنویسان برای بازسازی و ترتیب مجدد فیلدهای درون ساختارها به گونهای است که حافظه کمتری مصرف کنند و بهینهسازی مموری را تسهیل کند.
🟣لینک مقاله:
https://golangweekly.com/link/163987/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
betteralign 0.6: Make Your Programs Use Less Memory.. Maybe
🟢 خلاصه مقاله:
مقالهای که مورد بحث قرار گرفته، ابزاری را شرح میدهد که برای شناسایی ساختارهای دادهای (structs) در زبان برنامهنویسی Go طراحی شده است. این ابزار، نسخهای تغییر یافته از ابزار fieldalignment استاندارد Go میباشد. تفاوت اصلی آن در این است که فایلهای تولید شده یا فایلهای آزمایشی را نادیده میگیرد، همچنین از بررسی ساختارهای دادهای که دارای فیلدهای ناشناخته یا بدون نام هستند خودداری میکند. به علاوه، این ابزار نظرات موجود در کد را حذف نکرده و دارای بهبودهایی در تجربه توسعهدهندگان (DX improvements) است. هدف اصلی از این ابزار، کمک به برنامهنویسان برای بازسازی و ترتیب مجدد فیلدهای درون ساختارها به گونهای است که حافظه کمتری مصرف کنند و بهینهسازی مموری را تسهیل کند.
🟣لینک مقاله:
https://golangweekly.com/link/163987/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - dkorunic/betteralign: Make your Go programs use less memory (maybe)
Make your Go programs use less memory (maybe). Contribute to dkorunic/betteralign development by creating an account on GitHub.
💘2🔥1
🔵 عنوان مقاله
Pixel Federation Swaps MSK for WarpStream, Saves 83% on Kafka Costs
🟢 خلاصه مقاله:
مقالهای که ملاحظه شد، به بررسی تجربه شرکت Pixel Federation در استفاده از WarpStream به جای AWS MSK میپردازد. Pixel Federation که پیشتر از AWS MSK به عنوان راهحلی برای مدیریت دادههای Kafka استفاده میکرد، تصمیم گرفت تا به WarpStream بروزرسانی کند. این انتقال منجر به کاهش قابل توجهی در هزینههای مربوط به Kafka شده است. علاوه بر این، با استفاده از WarpStream، نیاز به بهرهبرداری پیچیده از VPC Peering، که با AWS MSK مورد نیاز بود، حذف گردید. در نتیجه، Pixel Federation توانست هم از نظر مالی و هم از نظر فنی بهبود قابل توجهی را تجربه کند. این تغییر نه تنها به کاهش هزینهها منجر شده بلکه پیچیدگی فنی مربوط به نگهداری و تعمیرات زیرساختها را نیز به طور مؤثری کاهش داده است.
🟣لینک مقاله:
https://golangweekly.com/link/163979/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Pixel Federation Swaps MSK for WarpStream, Saves 83% on Kafka Costs
🟢 خلاصه مقاله:
مقالهای که ملاحظه شد، به بررسی تجربه شرکت Pixel Federation در استفاده از WarpStream به جای AWS MSK میپردازد. Pixel Federation که پیشتر از AWS MSK به عنوان راهحلی برای مدیریت دادههای Kafka استفاده میکرد، تصمیم گرفت تا به WarpStream بروزرسانی کند. این انتقال منجر به کاهش قابل توجهی در هزینههای مربوط به Kafka شده است. علاوه بر این، با استفاده از WarpStream، نیاز به بهرهبرداری پیچیده از VPC Peering، که با AWS MSK مورد نیاز بود، حذف گردید. در نتیجه، Pixel Federation توانست هم از نظر مالی و هم از نظر فنی بهبود قابل توجهی را تجربه کند. این تغییر نه تنها به کاهش هزینهها منجر شده بلکه پیچیدگی فنی مربوط به نگهداری و تعمیرات زیرساختها را نیز به طور مؤثری کاهش داده است.
🟣لینک مقاله:
https://golangweekly.com/link/163979/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Warpstream
Pixel Federation Powers Mobile Analytics Platform with WarpStream, saves 83% over MSK
Pixel Federation is the developer of nearly a dozen highly popular mobile games with players from all over the world. They have millions of monthly active users, and those millions of users generate lots of events. In fact, Pixel Federation uses an event…
👍1💅1
🔵 عنوان مقاله
Master the Fullstack
🟢 خلاصه مقاله:
این مقاله یک مسیر یادگیری جامع را برای کاربرانی که قصد توسعه مهارتهای خود در زمینه سرور دارند، ارائه میدهد. در این مقاله، خواننده با نحوه ساخت APIها، ایجاد کانتینرها، استقرار کد، راهاندازی سرورها و دیگر فعالیتهای مرتبط آشنا میشود. فرآیند یادگیری به گونهای طراحی شده است که پوشش دهنده تمام جنبههای تکنیکی مورد نیاز برای مدیریت و بهینهسازی عملکرد سرورها باشد. مقاله بر تعادل بین نظریه و عملی تأکید دارد و به خوانندگان این امکان را میدهد که با انجام تمرینهای عملی دانش خود را به طور مؤثر تقویت کنند. این محتوا برای توسعهدهندگان نرمافزار، مدیران سیستم و هر فرد دیگری که به دنبال افزایش دانش فنی خود در زمینه سرور و زیرساختهای مرتبط هستند، مناسب است.
🟣لینک مقاله:
https://golangweekly.com/link/163963/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Master the Fullstack
🟢 خلاصه مقاله:
این مقاله یک مسیر یادگیری جامع را برای کاربرانی که قصد توسعه مهارتهای خود در زمینه سرور دارند، ارائه میدهد. در این مقاله، خواننده با نحوه ساخت APIها، ایجاد کانتینرها، استقرار کد، راهاندازی سرورها و دیگر فعالیتهای مرتبط آشنا میشود. فرآیند یادگیری به گونهای طراحی شده است که پوشش دهنده تمام جنبههای تکنیکی مورد نیاز برای مدیریت و بهینهسازی عملکرد سرورها باشد. مقاله بر تعادل بین نظریه و عملی تأکید دارد و به خوانندگان این امکان را میدهد که با انجام تمرینهای عملی دانش خود را به طور مؤثر تقویت کنند. این محتوا برای توسعهدهندگان نرمافزار، مدیران سیستم و هر فرد دیگری که به دنبال افزایش دانش فنی خود در زمینه سرور و زیرساختهای مرتبط هستند، مناسب است.
🟣لینک مقاله:
https://golangweekly.com/link/163963/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Frontendmasters
Fullstack to Backend Learning Path - Expand Your Abilities to the Server and Master the Fullstack
Set up servers, create APIs, and deploy your code to the world by learning the full stack.
🍓1
🔵 عنوان مقاله
Memos: A Privacy-First Go-Powered Note Taking App
🟢 خلاصه مقاله:
مقالهای که بررسی شده، در مورد یک برنامه وب نوتبرداری است کە میتوانید به صورت شخصی میزبانی کنید و به طور مکرر بهروزرسانی میشود. این برنامه وب تحت لیسانس MIT قرار دارد و از چارچوب Echo برای توسعۀ خود استفاده میکند. اطلاعات درون برنامه در یک فایل SQLite ذخیره میشوند. علاوه بر این، کد منبع برنامه در GitHub قابل دسترسی است. این اطلاعات میتوانند به توسعهدهندگان کمک کنند تا راهاندازی وانتقال دادهها را به صورت مؤثرتر انجام دهند. تأکید اصلی روی قابلیت بهروزرسانی مکرر و استفاده آسان از اطلاعات در محیطهای مختلف است.
🟣لینک مقاله:
https://golangweekly.com/link/164002/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Memos: A Privacy-First Go-Powered Note Taking App
🟢 خلاصه مقاله:
مقالهای که بررسی شده، در مورد یک برنامه وب نوتبرداری است کە میتوانید به صورت شخصی میزبانی کنید و به طور مکرر بهروزرسانی میشود. این برنامه وب تحت لیسانس MIT قرار دارد و از چارچوب Echo برای توسعۀ خود استفاده میکند. اطلاعات درون برنامه در یک فایل SQLite ذخیره میشوند. علاوه بر این، کد منبع برنامه در GitHub قابل دسترسی است. این اطلاعات میتوانند به توسعهدهندگان کمک کنند تا راهاندازی وانتقال دادهها را به صورت مؤثرتر انجام دهند. تأکید اصلی روی قابلیت بهروزرسانی مکرر و استفاده آسان از اطلاعات در محیطهای مختلف است.
🟣لینک مقاله:
https://golangweekly.com/link/164002/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Usememos
Memos - Open Source, Self-hosted, Your Notes, Your Way
A privacy-first, lightweight note-taking solution that allows you to effortlessly capture and share your ideas.
❤1🐳1
🔵 عنوان مقاله
Fuego: A Nest-Inspired API/Web Framework for Go
🟢 خلاصه مقاله:
مقالهای که به بررسی آن پرداختهاید درباره چارچوبی برای زبان برنامهنویسی Go به نام "Nest" میباشد که از الهام گرفته است. این چارچوب منحصر به فرد است زیرا تنها چارچوبی است که قابلیت تولید اسناد OpenAPI را از کد فراهم میکند. نمونه "hello world" نشان داده شده در مقاله به همراه مستندات کامل، امکان دسترسی و فهم سریع و آسان قابلیتهای این چارچوب را به کاربران میدهد. نسخه اخیر (0.17) از این چارچوب، پشتیبانی اولیه از مسیریابی Gin را به اضافه کرده است که توسعه دهندگان Go را قادر میسازد تا از این قابلیتهای جدید بهرهبرداری کنند. این گسترشها با هدف بهبود تجربه توسعه دهندگان Go و افزایش کارایی برنامههای کاربردی ارائه شدهاند.
🟣لینک مقاله:
https://golangweekly.com/link/163989/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Fuego: A Nest-Inspired API/Web Framework for Go
🟢 خلاصه مقاله:
مقالهای که به بررسی آن پرداختهاید درباره چارچوبی برای زبان برنامهنویسی Go به نام "Nest" میباشد که از الهام گرفته است. این چارچوب منحصر به فرد است زیرا تنها چارچوبی است که قابلیت تولید اسناد OpenAPI را از کد فراهم میکند. نمونه "hello world" نشان داده شده در مقاله به همراه مستندات کامل، امکان دسترسی و فهم سریع و آسان قابلیتهای این چارچوب را به کاربران میدهد. نسخه اخیر (0.17) از این چارچوب، پشتیبانی اولیه از مسیریابی Gin را به اضافه کرده است که توسعه دهندگان Go را قادر میسازد تا از این قابلیتهای جدید بهرهبرداری کنند. این گسترشها با هدف بهبود تجربه توسعه دهندگان Go و افزایش کارایی برنامههای کاربردی ارائه شدهاند.
🟣لینک مقاله:
https://golangweekly.com/link/163989/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go-fuego.dev
The framework for busy Go developers
1👍2🙏1
🔵 عنوان مقاله
templ: A Way to Build HTML with Go
🟢 خلاصه مقاله:
مقاله مورد بحث بر توسعه اجزاء در برنامهنویسی وب تمرکز دارد که هر کدام قطعههایی از HTML را رندر میکنند. این اجزاء سپس به گونهای با هم ترکیب میشوند تا صفحات وب، اسناد، و اپلیکیشنها را شکل دهند. هسته این فرآیند در این است که با استفاده از مخزن کد متنباز GitHub، توسعهدهندگان میتوانند به تکه کدهای نوشته شده توسط دیگران دسترسی پیدا کنند و آنها را در پروژههای خود به کار ببرند. این رویکرد نه تنها به بهبود کارایی و کاهش تکرار کار کمک میکند بلکه فرصتهایی برای همکاری و اشتراکگذاری دانش فنی بین توسعهدهندگان از سراسر دنیا فراهم میآورد. این مدل از توسعه مبتنی بر اجزاء، به صورت گستردهای به عنوان یک استاندارد صنعتی در توسعه وب به کار رفته است.
🟣لینک مقاله:
https://golangweekly.com/link/163992/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
templ: A Way to Build HTML with Go
🟢 خلاصه مقاله:
مقاله مورد بحث بر توسعه اجزاء در برنامهنویسی وب تمرکز دارد که هر کدام قطعههایی از HTML را رندر میکنند. این اجزاء سپس به گونهای با هم ترکیب میشوند تا صفحات وب، اسناد، و اپلیکیشنها را شکل دهند. هسته این فرآیند در این است که با استفاده از مخزن کد متنباز GitHub، توسعهدهندگان میتوانند به تکه کدهای نوشته شده توسط دیگران دسترسی پیدا کنند و آنها را در پروژههای خود به کار ببرند. این رویکرد نه تنها به بهبود کارایی و کاهش تکرار کار کمک میکند بلکه فرصتهایی برای همکاری و اشتراکگذاری دانش فنی بین توسعهدهندگان از سراسر دنیا فراهم میآورد. این مدل از توسعه مبتنی بر اجزاء، به صورت گستردهای به عنوان یک استاندارد صنعتی در توسعه وب به کار رفته است.
🟣لینک مقاله:
https://golangweekly.com/link/163992/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
templ.guide
Introduction | templ docs
templ - build HTML with Go
❤2👍1
🤝Mohammad AbdorrahmaniMohammad Abdorrahmani
اگه شما هم با Golang کد میزنید، خبر خوب اینه که ورژن 1.24 قراره تو فوریه 2025 منتشر بشه و کلی بهبود خفن آورده که کارمون رو هم سریعتر میکنه، هم راحتتر.
هایلایتهای این نسخه:
1️⃣ سوئیچ به SwissTable تو کامپایلر:
گولنگ با این تغییر، مدیریت مپها رو خیلی بهینهتر کرده! رم کمتر مصرف میشه و عملیات خوندن/نوشتن سریعتر شده.
2️⃣ آپدیت استاندارد لایبرری:
دو پکیج جدید داریم:
os.Root برای راحتتر کردن کارهای مربوط به دایرکتوریها.
weak برای هندل کردن weak pointers که خیلی وقتا به درد میخوره.
یه قابلیت جدید برای alias کردن sliceها که به خصوص با افزایش استفاده از جنریکها خیلی کاربردیه.
3️⃣ بهبود ابزارها (Tooling):
یه قابلیت خفن به اسم متا-پترن اضافه شده که نصب ابزارهایی مثل mockgen رو راحتتر از همیشه میکنه.
خروجی JSON برای go test: تحلیل تستها دیگه یه لذت شده!
GOAUTH: حالا میتونید راحتتر به ریپوزیتوریهای پرایوت مثل GitHub وصل بشید.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
اگه شما هم با Golang کد میزنید، خبر خوب اینه که ورژن 1.24 قراره تو فوریه 2025 منتشر بشه و کلی بهبود خفن آورده که کارمون رو هم سریعتر میکنه، هم راحتتر.
هایلایتهای این نسخه:
1️⃣ سوئیچ به SwissTable تو کامپایلر:
گولنگ با این تغییر، مدیریت مپها رو خیلی بهینهتر کرده! رم کمتر مصرف میشه و عملیات خوندن/نوشتن سریعتر شده.
2️⃣ آپدیت استاندارد لایبرری:
دو پکیج جدید داریم:
os.Root برای راحتتر کردن کارهای مربوط به دایرکتوریها.
weak برای هندل کردن weak pointers که خیلی وقتا به درد میخوره.
یه قابلیت جدید برای alias کردن sliceها که به خصوص با افزایش استفاده از جنریکها خیلی کاربردیه.
3️⃣ بهبود ابزارها (Tooling):
یه قابلیت خفن به اسم متا-پترن اضافه شده که نصب ابزارهایی مثل mockgen رو راحتتر از همیشه میکنه.
خروجی JSON برای go test: تحلیل تستها دیگه یه لذت شده!
GOAUTH: حالا میتونید راحتتر به ریپوزیتوریهای پرایوت مثل GitHub وصل بشید.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
💘5👍1
در نسخه 1.24 زبان برنامهنویسی Go (Golang)، ویژگی جدیدی به نام SwissTable به عنوان بخشی از بهبودهای مربوط به map (نوع دادهای دیکشنری یا associative array در Go) معرفی شد. این ویژگی بهینهسازیهایی در عملکرد و کارایی
---
### ۱. SwissTable چیست؟
- SwissTable یک ساختار دادهای جدید برای پیادهسازی
- این ساختار دادهای بر اساس جدول هش (hash table) کار میکند، اما با بهینهسازیهایی که باعث افزایش سرعت و کاهش مصرف حافظه میشود.
---
### ۲. مزایای SwissTable:
- سرعت بیشتر: SwissTable با استفاده از تکنیکهای بهینهسازی مانند SIMD (Single Instruction, Multiple Data) و cache-friendly data structures**، سرعت عملیاتهای درج، حذف و جستجو در `map` را افزایش میدهد.
- **مصرف حافظه کمتر: این ساختار دادهای از حافظه بهینهتری استفاده میکند و باعث کاهش مصرف حافظه در مقایسه با پیادهسازیهای قدیمیتر
- مقیاسپذیری بهتر: SwissTable برای کار با مجموعههای دادهای بزرگ و کوچک بهطور همزمان بهینهسازی شده است.
---
### ۳. تغییرات در Go 1.24:
- در Go 1.24، تیم توسعهدهندگان Go تصمیم گرفتند از SwissTable به عنوان پیادهسازی پیشفرض برای
- این تغییر بهطور خودکار برای همه کاربران Go اعمال میشود و نیازی به تغییر کد یا تنظیمات خاصی ندارد.
---
### ۴. تأثیر SwissTable بر برنامههای Go:
- برنامههای موجود: برنامههایی که از
- برنامههای جدید: توسعهدهندگان میتوانند از
---
### ۵. مقایسه با پیادهسازی قدیمی `map`:
- پیادهسازی قدیمی: در نسخههای قبلی Go،
- SwissTable: این ساختار دادهای جدید با استفاده از تکنیکهای پیشرفتهتر، عملکرد
---
### ۶. مثال استفاده از `map` در Go:
در Go،
با استفاده از SwissTable، این عملیاتها (درج، حذف، و جستجو) سریعتر و با مصرف حافظه کمتری انجام میشوند.
---
### ۷. نتیجهگیری:
- SwissTable یک بهبود بزرگ در پیادهسازی
- این ویژگی باعث افزایش سرعت، کاهش مصرف حافظه، و بهبود مقیاسپذیری
- توسعهدهندگان Go میتوانند بدون نیاز به تغییر کد، از مزایای این بهبودها بهرهمند شوند.
اگر از Go استفاده میکنید، بهروزرسانی به نسخه 1.24 یا بالاتر را در نظر بگیرید تا از این بهبودهای عملکردی بهرهمند شوید.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
map
ارائه میدهد. در زیر به بررسی این ویژگی و مزایای آن میپردازیم:---
### ۱. SwissTable چیست؟
- SwissTable یک ساختار دادهای جدید برای پیادهسازی
map
در Go است که از الگوریتمها و تکنیکهای بهینهشده برای بهبود عملکرد استفاده میکند.- این ساختار دادهای بر اساس جدول هش (hash table) کار میکند، اما با بهینهسازیهایی که باعث افزایش سرعت و کاهش مصرف حافظه میشود.
---
### ۲. مزایای SwissTable:
- سرعت بیشتر: SwissTable با استفاده از تکنیکهای بهینهسازی مانند SIMD (Single Instruction, Multiple Data) و cache-friendly data structures**، سرعت عملیاتهای درج، حذف و جستجو در `map` را افزایش میدهد.
- **مصرف حافظه کمتر: این ساختار دادهای از حافظه بهینهتری استفاده میکند و باعث کاهش مصرف حافظه در مقایسه با پیادهسازیهای قدیمیتر
map
میشود.- مقیاسپذیری بهتر: SwissTable برای کار با مجموعههای دادهای بزرگ و کوچک بهطور همزمان بهینهسازی شده است.
---
### ۳. تغییرات در Go 1.24:
- در Go 1.24، تیم توسعهدهندگان Go تصمیم گرفتند از SwissTable به عنوان پیادهسازی پیشفرض برای
map
استفاده کنند.- این تغییر بهطور خودکار برای همه کاربران Go اعمال میشود و نیازی به تغییر کد یا تنظیمات خاصی ندارد.
---
### ۴. تأثیر SwissTable بر برنامههای Go:
- برنامههای موجود: برنامههایی که از
map
استفاده میکنند، بهطور خودکار از مزایای SwissTable بهرهمند میشوند. این بهبودها شامل افزایش سرعت و کاهش مصرف حافظه است.- برنامههای جدید: توسعهدهندگان میتوانند از
map
با اطمینان بیشتری استفاده کنند، زیرا عملکرد آن بهطور قابل توجهی بهبود یافته است.---
### ۵. مقایسه با پیادهسازی قدیمی `map`:
- پیادهسازی قدیمی: در نسخههای قبلی Go،
map
با استفاده از یک ساختار دادهای مبتنی بر hash table پیادهسازی میشد که عملکرد خوبی داشت، اما برای برخی موارد خاص (مانند مجموعههای دادهای بزرگ) بهینهسازی نشده بود.- SwissTable: این ساختار دادهای جدید با استفاده از تکنیکهای پیشرفتهتر، عملکرد
map
را در همه موارد بهبود میبخشد.---
### ۶. مثال استفاده از `map` در Go:
در Go،
map
به صورت زیر استفاده میشود:package main
import "fmt"
func main() {
// ایجاد یک map
m := make(map[string]int)
// درج داده در map
m["apple"] = 5
m["banana"] = 3
// خواندن داده از map
fmt.Println("تعداد سیبها:", m["apple"])
// حذف داده از map
delete(m, "banana")
// بررسی وجود کلید در map
if value, exists := m["banana"]; exists {
fmt.Println("تعداد موزها:", value)
} else {
fmt.Println("موز وجود ندارد.")
}
}
با استفاده از SwissTable، این عملیاتها (درج، حذف، و جستجو) سریعتر و با مصرف حافظه کمتری انجام میشوند.
---
### ۷. نتیجهگیری:
- SwissTable یک بهبود بزرگ در پیادهسازی
map
در Go است که در نسخه 1.24 معرفی شد.- این ویژگی باعث افزایش سرعت، کاهش مصرف حافظه، و بهبود مقیاسپذیری
map
میشود.- توسعهدهندگان Go میتوانند بدون نیاز به تغییر کد، از مزایای این بهبودها بهرهمند شوند.
اگر از Go استفاده میکنید، بهروزرسانی به نسخه 1.24 یا بالاتر را در نظر بگیرید تا از این بهبودهای عملکردی بهرهمند شوید.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍3🎉1🙏1
در نسخههای جدید زبان برنامهنویسی Go (Golang)، بهروزرسانیهایی در استاندارد لایبرری (Standard Library) انجام شده است که شامل اضافه شدن پکیجهای جدید و بهبود پکیجهای موجود میشود. در اینجا به دو پکیج جدید که اشاره کردید، یعنی `os.Root` و `weak`**، میپردازیم:
---
### ۱. **پکیج `os.Root`:
این پکیج جدید برای سادهسازی کارهای مربوط به مدیریت دایرکتوریها و مسیرهای فایلسیستمی معرفی شده است.
#### ویژگیهای کلیدی:
- دسترسی آسان به دایرکتوریهای ریشه: این پکیج توابعی را فراهم میکند که دسترسی به دایرکتوریهای ریشه (مانند
- مدیریت مسیرها: توابعی برای کار با مسیرهای نسبی و مطلق، تغییر دایرکتوری جاری، و بررسی وجود فایل یا دایرکتوری ارائه میدهد.
- سازگاری با سیستمعاملهای مختلف: این پکیج بهطور خودکار با تفاوتهای بین سیستمعاملها (مانند لینوکس، ویندوز، و macOS) سازگار است.
#### مثال استفاده:
---
### ۲. پکیج `weak`:
این پکیج جدید برای مدیریت weak pointers (اشارهگرهای ضعیف) معرفی شده است. weak pointers به توسعهدهندگان اجازه میدهند تا به یک شیء اشاره کنند بدون اینکه مانع از جمعآوری آن توسط Garbage Collector (GC) شوند.
#### ویژگیهای کلیدی:
- مدیریت حافظه هوشمند: weak pointers به توسعهدهندگان کمک میکنند تا از memory leaks جلوگیری کنند، زیرا این اشارهگرها مانع از جمعآوری شیء توسط GC نمیشوند.
- استفاده در ساختارهای داده پیچیده: این پکیج برای مواردی مانند کشها (caches)**، **لیستهای وابسته**، و سایر ساختارهای دادهای که نیاز به مدیریت حافظه دقیق دارند، مفید است.
- **سازگاری با Garbage Collector: weak pointers بهطور کامل با GC Go سازگار هستند و هیچ تأثیر منفی بر عملکرد آن ندارند.
#### مثال استفاده:
---
### ۳. مزایای این پکیجها:
- `os.Root`:
- سادهسازی کار با دایرکتوریها و مسیرها.
- کاهش نیاز به کدنویسی دستی برای مدیریت مسیرها.
- سازگاری با سیستمعاملهای مختلف.
- `weak`:
- جلوگیری از memory leaks با استفاده از weak pointers.
- مدیریت هوشمند حافظه در ساختارهای داده پیچیده.
- بهبود عملکرد برنامههایی که نیاز به مدیریت دقیق حافظه دارند.
---
### ۴. نتیجهگیری:
- `os.Root` و `weak` دو پکیج جدید و مفید در استاندارد لایبرری Go هستند که به توسعهدهندگان کمک میکنند تا کدهای بهینهتر و قابلحفظتری بنویسند.
- اگر از Go استفاده میکنید، بهروزرسانی به نسخههای جدید را در نظر بگیرید تا از این بهبودها و قابلیتهای جدید بهرهمند شوید.
این پکیجها بهطور خاص برای برنامههایی که نیاز به مدیریت حافظه دقیق یا کار با فایلسیستم دارند، بسیار مفید هستند.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
---
### ۱. **پکیج `os.Root`:
این پکیج جدید برای سادهسازی کارهای مربوط به مدیریت دایرکتوریها و مسیرهای فایلسیستمی معرفی شده است.
#### ویژگیهای کلیدی:
- دسترسی آسان به دایرکتوریهای ریشه: این پکیج توابعی را فراهم میکند که دسترسی به دایرکتوریهای ریشه (مانند
/
در لینوکس یا C:\
در ویندوز) را سادهتر میکند.- مدیریت مسیرها: توابعی برای کار با مسیرهای نسبی و مطلق، تغییر دایرکتوری جاری، و بررسی وجود فایل یا دایرکتوری ارائه میدهد.
- سازگاری با سیستمعاملهای مختلف: این پکیج بهطور خودکار با تفاوتهای بین سیستمعاملها (مانند لینوکس، ویندوز، و macOS) سازگار است.
#### مثال استفاده:
package main
import (
"fmt"
"os"
)
func main() {
// دریافت دایرکتوری ریشه
root := os.Root()
fmt.Println("دایرکتوری ریشه:", root)
// تغییر دایرکتوری جاری به دایرکتوری ریشه
err := os.Chdir(root)
if err != nil {
fmt.Println("خطا در تغییر دایرکتوری:", err)
return
}
// لیست فایلها و دایرکتوریها در دایرکتوری ریشه
files, err := os.ReadDir(".")
if err != nil {
fmt.Println("خطا در خواندن دایرکتوری:", err)
return
}
for _, file := range files {
fmt.Println(file.Name())
}
}
---
### ۲. پکیج `weak`:
این پکیج جدید برای مدیریت weak pointers (اشارهگرهای ضعیف) معرفی شده است. weak pointers به توسعهدهندگان اجازه میدهند تا به یک شیء اشاره کنند بدون اینکه مانع از جمعآوری آن توسط Garbage Collector (GC) شوند.
#### ویژگیهای کلیدی:
- مدیریت حافظه هوشمند: weak pointers به توسعهدهندگان کمک میکنند تا از memory leaks جلوگیری کنند، زیرا این اشارهگرها مانع از جمعآوری شیء توسط GC نمیشوند.
- استفاده در ساختارهای داده پیچیده: این پکیج برای مواردی مانند کشها (caches)**، **لیستهای وابسته**، و سایر ساختارهای دادهای که نیاز به مدیریت حافظه دقیق دارند، مفید است.
- **سازگاری با Garbage Collector: weak pointers بهطور کامل با GC Go سازگار هستند و هیچ تأثیر منفی بر عملکرد آن ندارند.
#### مثال استفاده:
package main
import (
"fmt"
"runtime"
"weak"
)
func main() {
// ایجاد یک شیء
obj := "این یک شیء است"
// ایجاد یک weak pointer به شیء
wp := weak.New(&obj)
// بررسی وجود شیء
if val, ok := wp.Get(); ok {
fmt.Println("شیء وجود دارد:", *val)
} else {
fmt.Println("شیء جمعآوری شده است.")
}
// حذف اشارهگر به شیء
obj = ""
runtime.GC() // اجرای Garbage Collector
// بررسی دوباره وجود شیء
if val, ok := wp.Get(); ok {
fmt.Println("شیء هنوز وجود دارد:", *val)
} else {
fmt.Println("شیء جمعآوری شده است.")
}
}
---
### ۳. مزایای این پکیجها:
- `os.Root`:
- سادهسازی کار با دایرکتوریها و مسیرها.
- کاهش نیاز به کدنویسی دستی برای مدیریت مسیرها.
- سازگاری با سیستمعاملهای مختلف.
- `weak`:
- جلوگیری از memory leaks با استفاده از weak pointers.
- مدیریت هوشمند حافظه در ساختارهای داده پیچیده.
- بهبود عملکرد برنامههایی که نیاز به مدیریت دقیق حافظه دارند.
---
### ۴. نتیجهگیری:
- `os.Root` و `weak` دو پکیج جدید و مفید در استاندارد لایبرری Go هستند که به توسعهدهندگان کمک میکنند تا کدهای بهینهتر و قابلحفظتری بنویسند.
- اگر از Go استفاده میکنید، بهروزرسانی به نسخههای جدید را در نظر بگیرید تا از این بهبودها و قابلیتهای جدید بهرهمند شوید.
این پکیجها بهطور خاص برای برنامههایی که نیاز به مدیریت حافظه دقیق یا کار با فایلسیستم دارند، بسیار مفید هستند.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍4🎉1🏆1