Dev Perfects – Telegram
Dev Perfects
41 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://news.1rj.ru/str/dev_perfects/455


ارتباط:
https://news.1rj.ru/str/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Geek Alerts
شرکت deepseek نسخه IOS خودش‌رو منتشر کرد.
هر ۲ ویژگی یعنی DeepThink و Search در نسخه موبایل نیز در دسترس هست.
توی توضیحاتش نوشته این مدل پیشرفته با نام DeepSeek-V3 شناخته میشه و بیش از ۶۰۰ میلیارد پارامتر داره، با استاندارد‌های جهانی همراهه و و سرعت بالاتر و کارامدی بیشتر داره، زندگی تو رو به شکلی کارآمدتر می‌کنه.
https://apps.apple.com/
@geekalerts
Forwarded from Anonymous 🏴‍☠️
🚀 دنبال دوره‌های آموزشی پولی به صورت رایگان هستید؟ 🚀

به کانال ما بپیوندید و به گنجینه‌ای از بهترین دوره‌های آموزشی از سایت‌های مختلف دسترسی پیدا کنید که ما آنها را برای شما رایگان قرار داده‌ایم! 🎁

از آموزش‌های تخصصی تا مهارت‌های کاربردی، همه چیز اینجاست. هر روز با محتوای جدید منتظر شما هستیم!

🌟
@packagePD 🌟
Forwarded from Gopher Academy
🔵 عنوان مقاله
templ: A Way to Build HTML with Go

🟢 خلاصه مقاله:
مقاله‌ مورد بحث بر توسعه اجزاء در برنامه‌نویسی وب تمرکز دارد که هر کدام قطعه‌هایی از HTML را رندر می‌کنند. این اجزاء سپس به گونه‌ای با هم ترکیب می‌شوند تا صفحات وب، اسناد، و اپلیکیشن‌ها را شکل دهند. هسته این فرآیند در این است که با استفاده از مخزن کد متن‌باز GitHub، توسعه‌دهندگان می‌توانند به تکه کد‌های نوشته شده توسط دیگران دسترسی پیدا کنند و آن‌ها را در پروژه‌های خود به کار ببرند. این رویکرد نه تنها به بهبود کارایی و کاهش تکرار کار کمک می‌کند بلکه فرصت‌هایی برای همکاری و اشتراک‌گذاری دانش فنی بین توسعه‌دهندگان از سراسر دنیا فراهم می‌‌آورد. این مدل از توسعه مبتنی بر اجزاء، به صورت گسترده‌ای به عنوان یک استاندارد صنعتی در توسعه وب به کار رفته است.

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


👑 @gopher_academy
ابزارهای هوش مصنوعی که هیشکی بهت نمیگه چون سکرته !

1. useTrag.com:
یه دستیار باهوش که کدهای برنامه‌نویسیت رو بررسی میکنه و اشکالات رو پیدا میکنه. مثل یه برنامه‌نویس با تجربه عمل میکنه و بهت میگه کجای کارت ایراد داره!

2. Pixyer.AI:
تصویربرداری حرفه‌ای از محصولات رو برات انجام میده. انگار یه عکاس حرفه‌ای داری که عکس‌های تبلیغاتی محصولاتت رو میگیره.

3. CapGo.AI:
این یکی مثل یه اکسل خیلی باهوشه! میتونه خودش داده‌ها رو تحلیل کنه و گزارش‌های هوشمند بهت بده.

4. Averi.ai:
مدیر بازاریابی دیجیتال شخصیته! استراتژی‌های بازاریابی رو طراحی میکنه و کمپین‌هات رو مدیریت میکنه.

5. GiddyGiddy.com:
یه همراه مجازی که باهات چت میکنه و حرف میزنه. مثل یه دوست که همیشه در دسترسه!

6. TableSprint.com:
کمکت میکنه سریع و راحت اپلیکیشن بسازی، بدون اینکه نیاز به دانش فنی زیادی داشته باشی.

7. Kusho.AI:
یه ابزار تست هوشمند که مسیرهای مختلف نرم‌افزارت رو چک میکنه تا مطمئن شی همه چیز درست کار میکنه.

8. PricingMaker.com:
قیمت‌گذاری محصولات و خدماتت رو هوشمندانه انجام میده. با تحلیل بازار، بهترین قیمت رو پیشنهاد میده.

9. SmartLeadMagnet.com:
محتوای جذاب و ارزشمند تولید میکنه که بتونی باهاش مشتری جذب کنی - مثل کتاب‌های الکترونیکی یا راهنماها.

10. PodLM.ai:
پادکست تولید میکنه! میتونه متن رو به پادکست تبدیل کنه یا حتی محتوای پادکست رو خودش بسازه.

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

@DevTwitter | <Safakaram/>
خوب بنچمارک 2021 آپدیت شد.
برید ببینید که php خام با دیتابیس pgsql کجا رفته!! درست چسبیده پشت سر node.js :))
حالا اونا به کنار laravel swoole ( همون لاراول اوکتان یا ورژن 8 لاراوله ) و lumen swoole هم اضافه شدن که توی تصویر میبینید که چطور جنگو رو لت و پار کردن :)))
واسه .net core عزیز هم فاتحه رو میخونم رفته توی رتبه ی 36 نشسته الان میگید واو چه رتبه ی خوبیه باید بگم که 5 فریم ورک php و همچنین خود php با ماژول ngx ازش جلو هست :))))
رتبه ی php با ماژول ngx و دیتابیس pqsql رتبه ی 20 ام هست.
شکست سنگین را بر تمام جنگو کار ها و asp کار ها تبریک عرض میکنم.
بنچمارک :
https://www.techempower.com/benchmarks/

پ.ن : حالا جنگو کار ها عزیز قبل آپدیت بنچمارک که اصلا php و لاراول اوکتان نبود خیلی قبولش داشتید حالا آپدیت شده باید دوبرابر قبولش داشته باشید :))
عمو عرفان برا همه ی افراد آرزوی موفقیت میکند و قصد تخریب ندارد.
@DevTwitter | <ERFAN MOHAMMADI/>
⚠️ ویروس ویندوزی برای دزدی و جاسوسی روی آداپتور تبدیل USB به پورت شبکه RJ45
که چینی‌‌ها در(aliexpress) میفروشند

🚨 چیپ حافظه فلش SPI که روی این تبدیل است به عنوان ذخیره‌ساز همراه با ویروس کار گذاشته شده
بیش از 10هزار بار فروش داشته😱

با استفاده و اجرای طولانی مدت کد خود را به فرآیندها سیستم تزریق می کند،
توانایی شناسایی و فرار از ماشین های مجازی دارد،
توانایی تغییر تنظیمات پروکسی را
توانایی استخراج کلیدهای فشرده شده
برای رد گم کردن از عناصر زبان روسی
توانای ذخیره سازی حجیم داده های دزدیده شده در حافظه فلش روی برد را دارد
گزارش تحلیل
منبع
🔥دفعه بعدی که یک قهوه ساز سفارش دادید باز کردید یک انتن کد Morse دید تعجب نکنید 😁
در خرید های خود دقت کنید ، خطر از آنچه فکر میکنید به شما نزدیک تر است
استفاده از لینوکس ، و توصیه های امنیتی را جدی بگیرد


❤️ ممنون از حمایت هاتون 💐🌺
Forwarded from Sudoer (Morteza Bashsiz)
دل‌نوشته

واقعا زندگی خیلی کار سختیه
خیلی هم کار سختیه
من بر این باور بودم و هستم همیشه که برای خوب زندگی کردن باید چندتا کار رو خوب انجام بدم
۱. تلاش کنم
۲. برنامه داشته باشم
۳. پیگیر باشم
۴. مشتاق باشم
۵. با اراده باشم
و این رو هم همیشه در نظر دارم که شانس خیلی مهمه و هیچ راه ساده‌تری برای زندگی و هیچ میان‌بری وجود نداره
Forwarded from DevAcademy
برا بچه هایی که دنبال کارآموزی هستن،این لینک چک کنن شاید بدردشون خورد

https://career.dgshahr.com/job-detail/75f135b3-5b0f-417e-9284-088548230688


💻@DevAcaademy
💬
@DevAcademyGroup
🔔قطعی شد🔔

🐍یادگیری عمیق با پایتون

🔥DEEP LEARNING by PYTHON

16 ساعت؛ 2.5 میلیون تومان
🗓جمعه ها از 28 دی
🎙توضیحات مدرس دوره 👉کلیک
🎥وبینار رایگان👉کلیک
✍️لینک ثبت نام👉کلیک

📌مشاوره و ثبت نام:
🙍‍♂️@ParsPajouhaanCEE
📞021-88322992(105)

🌐 وبسایت 📱 کانال تلگرام 📱 اینستاگرام
وقتی تو مرورگر google.com رو تایپ میکنی چه اتفاقی میوفته

@DevTwitter
Forwarded from Gopher Academy
🤝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://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from Gopher Academy
در نسخه 1.24 زبان برنامه‌نویسی Go (Golang)، ویژگی جدیدی به نام SwissTable به عنوان بخشی از بهبودهای مربوط به map (نوع داده‌ای دیکشنری یا associative array در Go) معرفی شد. این ویژگی بهینه‌سازی‌هایی در عملکرد و کارایی 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://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
بررسی دو مفهوم stateful و stateless توی طراحی سیستم ها بخصوص توی وب و api ها

این روش ها هرکدوم مزایا و معایب خودشونو دارن که من چند تاشو میگم

1- دارای حالت (stateful) : توی یک سیستم دارای حالت ، سرور میاد و اطلاعاتی که مربوط به وضعیت کاربر میشن رو ذخیره میکنه داخل session ؛ برای مثال وقتی وارد یک سایت فروشگاهی میشیم اطلاعاتی مثله (سبد خرید ، احراز هویت و ...) به دست سرور توی session ما ذخیره میشن.

از مزایای این روش اینه که مناسبه برای سیستم هایی که نیاز به پیگیری وضعیت کاربر دارن مثل (بازی ها ، چت ها ، سبد خرید و ....)

معایبش هم اینه که باید منابع بیشتری مصرف کنید و مقیاس پذیری سخت تری داره


2- بی حالت (stateless) : توی این مدل سیستم ها هیچ اطلاعاتی از درخواست های قبلی کاربر ذخیره نمیشن توی session. و هر درخواست مستقل از درخواست قبلی ارسال میشه و همه ی اطلاعات مورد نیاز باید توی همون درخواست دریافت بشه.


مزایای این روش سرعت بیشتری که داره هست چون نیاز ندارید به session دسترسی داشته باشید و مقیاس پذیری بالایی داره

معایب هم می تونیم به مدیریت پیچیده ای که ممکنه برای حفظ وضعیت کاربر ها ایجاد بشه اشاره کنیم و همینطور به ارسال اطلاعات تکراری و اضافی در هر درخواست اشاره کنیم.

@DevTwitter | <Ali/>
Forwarded from Gopher Academy
در نسخه‌های جدید زبان برنامه‌نویسی Go (Golang)، به‌روزرسانی‌هایی در استاندارد لایبرری (Standard Library) انجام شده است که شامل اضافه شدن پکیج‌های جدید و بهبود پکیج‌های موجود می‌شود. در اینجا به دو پکیج جدید که اشاره کردید، یعنی `os.Root` و `weak`**، می‌پردازیم:

---

### ۱. **پکیج `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://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from Gopher Academy
در نسخه‌های جدید زبان برنامه‌نویسی Go (Golang)، قابلیت جدیدی برای alias کردن sliceها معرفی شده است که به توسعه‌دهندگان اجازه می‌دهد تا به راحتی از sliceها با نام‌های جدید استفاده کنند. این قابلیت به خصوص با افزایش استفاده از جنریک‌ها (Generics) در Go بسیار مفید است، زیرا باعث بهبود خوانایی و کاهش تکرار کد می‌شود.

---

### ۱. alias کردن sliceها چیست؟
- alias کردن به معنی تعریف یک نام جدید برای یک نوع داده موجود است. این کار به توسعه‌دهندگان اجازه می‌دهد تا از نام‌های کوتاه‌تر یا توصیفی‌تر برای انواع داده‌ای پیچیده استفاده کنند.
- در Go، این قابلیت به‌طور خاص برای sliceها بسیار مفید است، زیرا sliceها یکی از پرکاربردترین انواع داده‌ای در Go هستند.

---

### ۲. چرا alias کردن sliceها مهم است؟
- بهبود خوانایی کد: با استفاده از aliasها، می‌توانید از نام‌های توصیفی‌تر برای sliceها استفاده کنید که باعث خوانایی بیشتر کد می‌شود.
- کاهش تکرار کد: اگر از sliceها با انواع داده‌ای پیچیده استفاده می‌کنید، alias کردن باعث کاهش تکرار کد و ساده‌تر شدن آن می‌شود.
- سازگاری با جنریک‌ها: با معرفی جنریک‌ها در Go، alias کردن sliceها به توسعه‌دهندگان اجازه می‌دهد تا از جنریک‌ها به‌طور موثرتری استفاده کنند.

---

### ۳. نحوه alias کردن sliceها:
در Go، می‌توانید از کلمه کلیدی `type` برای تعریف alias استفاده کنید. در اینجا چند مثال آورده شده است:

#### مثال ۱: alias کردن یک slice ساده
package main

import "fmt"

// تعریف یک alias برای slice از اعداد صحیح
type IntSlice = []int

func main() {
var numbers IntSlice = []int{1, 2, 3, 4, 5}
fmt.Println(numbers) // خروجی: [1 2 3 4 5]
}


#### مثال ۲: alias کردن یک slice با جنریک‌ها
package main

import "fmt"

// تعریف یک alias برای slice از هر نوع داده‌ای با استفاده از جنریک‌ها
type GenericSlice[T any] = []T

func main() {
var numbers GenericSlice[int] = []int{1, 2, 3, 4, 5}
fmt.Println(numbers) // خروجی: [1 2 3 4 5]

var names GenericSlice[string] = []string{"Alice", "Bob", "Charlie"}
fmt.Println(names) // خروجی: [Alice Bob Charlie]
}


#### مثال ۳: alias کردن sliceهای پیچیده
package main

import "fmt"

// تعریف یک alias برای slice از sliceهای اعداد صحیح
type IntSliceSlice = [][]int

func main() {
var matrix IntSliceSlice = [][]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
fmt.Println(matrix) // خروجی: [[1 2 3] [4 5 6] [7 8 9]]
}


---

### ۴. مزایای alias کردن sliceها:
- خوانایی بهتر: با استفاده از aliasها، می‌توانید از نام‌های توصیفی‌تر برای sliceها استفاده کنید که باعث خوانایی بیشتر کد می‌شود.
- کاهش تکرار کد: اگر از sliceها با انواع داده‌ای پیچیده استفاده می‌کنید، alias کردن باعث کاهش تکرار کد و ساده‌تر شدن آن می‌شود.
- سازگاری با جنریک‌ها: alias کردن sliceها به توسعه‌دهندگان اجازه می‌دهد تا از جنریک‌ها به‌طور موثرتری استفاده کنند.

---

### ۵. نتیجه‌گیری:
- alias کردن sliceها یک قابلیت جدید و مفید در Go است که به توسعه‌دهندگان اجازه می‌دهد تا کدهای خوانا‌تر و قابل‌حفظ‌تری بنویسند.
- این قابلیت به خصوص با افزایش استفاده از جنریک‌ها در Go بسیار مفید است، زیرا باعث بهبود خوانایی و کاهش تکرار کد می‌شود.

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


https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from Gopher Academy
در نسخه‌های جدید زبان برنامه‌نویسی Go (Golang)، بهبودهای قابل توجهی در ابزارها (Tooling) انجام شده است. یکی از این بهبودها، معرفی قابلیت جدیدی به نام متا-پترن (Meta-Pattern) است که نصب و استفاده از ابزارهای جانبی مانند `mockgen` را بسیار ساده‌تر و کارآمدتر می‌کند. در اینجا به بررسی این قابلیت و مزایای آن می‌پردازیم:

---

### ۱. متا-پترن (Meta-Pattern) چیست؟
- متا-پترن یک قابلیت جدید در ابزارهای Go است که به توسعه‌دهندگان اجازه می‌دهد تا ابزارهای جانبی (مانند `mockgen`، `protoc`، و غیره) را به‌طور خودکار نصب و مدیریت کنند.
- این قابلیت با استفاده از فایل‌های پیکربندی (مانند `go.work` یا go.mod) کار می‌کند و نیاز به نصب دستی ابزارها را کاهش می‌دهد.

---

### ۲. مزایای متا-پترن:
- ساده‌سازی نصب ابزارها: با استفاده از متا-پترن، می‌توانید ابزارهای مورد نیاز پروژه خود را به‌طور خودکار نصب کنید.
- مدیریت وابستگی‌ها: این قابلیت به شما کمک می‌کند تا وابستگی‌های ابزارها را به‌طور موثرتری مدیریت کنید.
- یکپارچه‌سازی با ابزارهای موجود: متا-پترن با ابزارهای موجود Go (مانند go generate و go mod) به‌طور کامل یکپارچه شده است.

---

### ۳. نحوه استفاده از متا-پترن:
برای استفاده از متا-پترن، می‌توانید از فایل‌های پیکربندی مانند go.work یا go.mod استفاده کنید. در اینجا یک مثال آورده شده است:

#### مثال ۱: استفاده از متا-پترن در go.mod
module example.com/myproject

go 1.20

require (
github.com/golang/mock v1.6.0
)

// تعریف ابزارهای مورد نیاز
toolchain {
mockgen = "github.com/golang/mock/mockgen@v1.6.0"
}


#### مثال ۲: استفاده از متا-پترن در go.work
go 1.20

use (
.
./submodule
)

// تعریف ابزارهای مورد نیاز
toolchain {
mockgen = "github.com/golang/mock/mockgen@v1.6.0"
protoc = "google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.0"
}


---

### ۴. نصب خودکار ابزارها:
با استفاده از متا-پترن، می‌توانید ابزارهای مورد نیاز خود را به‌طور خودکار نصب کنید. برای این کار، کافی است دستور زیر را اجرا کنید:

go install toolchain


این دستور به‌طور خودکار ابزارهای تعریف شده در go.mod یا go.work را نصب می‌کند.

---

### ۵. استفاده از ابزارها:
پس از نصب ابزارها، می‌توانید از آن‌ها در پروژه خود استفاده کنید. به عنوان مثال، برای استفاده از `mockgen`، کافی است دستور زیر را اجرا کنید:

go generate ./...


این دستور به‌طور خودکار فایل‌های mock را برای پروژه شما ایجاد می‌کند.

---

### ۶. مثال کامل:
در اینجا یک مثال کامل از استفاده از متا-پترن برای نصب و استفاده از `mockgen` آورده شده است:

#### فایل go.mod:
module example.com/myproject

go 1.20

require (
github.com/golang/mock v1.6.0
)

toolchain {
mockgen = "github.com/golang/mock/mockgen@v1.6.0"
}


#### فایل main.go:
package main

import (
"example.com/myproject/mocks"
"testing"
)

func TestSomething(t *testing.T) {
mock := mocks.NewMockMyInterface(t)
mock.On("MyMethod").Return(nil)

// تست خود را اینجا بنویسید
}


#### اجرای دستورات:
# نصب ابزارها
go install toolchain

# ایجاد فایل‌های mock
go generate ./...

# اجرای تست‌ها
go test ./...


---

### ۷. نتیجه‌گیری:
- متا-پترن یک قابلیت جدید و مفید در ابزارهای Go است که نصب و مدیریت ابزارهای جانبی را بسیار ساده‌تر می‌کند.
- این قابلیت به خصوص برای ابزارهایی مانند `mockgen`، `protoc`، و سایر ابزارهای تولید کد بسیار مفید است.
- اگر از Go استفاده می‌کنید، به‌روزرسانی به نسخه‌های جدید را در نظر بگیرید تا از این بهبودها و قابلیت‌های جدید بهره‌مند شوید.

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

https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0