Forwarded from Bardia & Erfan
واقعا برنامه نویس بودن تو ایران ،یه مسیر شغلی کاملا مسخره است.
یوتیوب فیلتره ، سایت های آموزشی تحریم هستیم. پرداخت ارزی به سختی اتفاق میوفته و غیره.
در هر صورت خواستم بگم Github Copilot
به صورت رایگان در دسترس هست. اما تحریم هستیم.
https://aka.ms/vscode-activatecopilotfree
https://code.visualstudio.com/docs/copilot/setup-simplified
<پوریای اصلی قدیمی/>
➖➖➖➖➖➖➖➖
🕸 @labdon_academy
یوتیوب فیلتره ، سایت های آموزشی تحریم هستیم. پرداخت ارزی به سختی اتفاق میوفته و غیره.
در هر صورت خواستم بگم Github Copilot
به صورت رایگان در دسترس هست. اما تحریم هستیم.
https://aka.ms/vscode-activatecopilotfree
https://code.visualstudio.com/docs/copilot/setup-simplified
<پوریای اصلی قدیمی/>
➖➖➖➖➖➖➖➖
🕸 @labdon_academy
👻9👍6🤝2❤1💘1
Forwarded from Software Engineer Labdon
توی این مقاله اومده یه سری دلیل گفته که چرا مدیران ارشد شما را جدی نمی گیرند!!!🤔😅🚬
🔻 https://zaidesanton.substack.com/p/6-reasons-why-the-senior-leadership
➖➖➖➖➖➖➖➖
🕸 https://linktr.ee/Labdon
🔻 https://zaidesanton.substack.com/p/6-reasons-why-the-senior-leadership
➖➖➖➖➖➖➖➖
🕸 https://linktr.ee/Labdon
👍5
Forwarded from Bardia & Erfan
🥰1
اگر با زبان Go کار میکنید
بهتون اکستنشن Error Lens رو پیشنهاد میکنم
در همون لحظه و محیط کد به شما ارور های احتمالی رو میده
<Misagh Momeni Bashuqeh/>
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
بهتون اکستنشن Error Lens رو پیشنهاد میکنم
در همون لحظه و محیط کد به شما ارور های احتمالی رو میده
<Misagh Momeni Bashuqeh/>
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
👍7❤1🍾1
Forwarded from Software Engineer Labdon
🍾یه سری رودمپ بدرد بخور براتون ردیف کردم
🔻Engineering Manager
https://roadmap.sh/engineering-manager
🔻Software Design and Architecture
https://roadmap.sh/software-design-architecture
🔻System Design
https://roadmap.sh/system-design
🔻Software Architect
https://roadmap.sh/software-architect
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
🔻Engineering Manager
https://roadmap.sh/engineering-manager
🔻Software Design and Architecture
https://roadmap.sh/software-design-architecture
🔻System Design
https://roadmap.sh/system-design
🔻Software Architect
https://roadmap.sh/software-architect
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
🙏4❤1👍1🍾1
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