Gopher Academy
3.32K subscribers
910 photos
40 videos
279 files
1.92K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72

ادمین تبلیغات:
@labdon_ads
Download Telegram
Gopher Academy
اگر طول (size) یک اسلایس در Go بیشتر از ظرفیت (cap) آن شود، Go به‌طور خودکار یک حافظه جدید با ظرفیت بزرگ‌تر تخصیص می‌دهد. سپس عناصر قدیمی را به حافظه جدید منتقل کرده و عنصر جدید را اضافه می‌کند. این عملیات می‌تواند هزینه‌بر باشد، زیرا شامل تخصیص مجدد و کپی…
در Go، اگر تعداد عناصر در یک اسلایس از مقدار ظرفیت فعلی (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
👍92🍾21
🔵 عنوان مقاله
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
💘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
👍1💅1
🔵 عنوان مقاله
Master the Fullstack

🟢 خلاصه مقاله:
این مقاله یک مسیر یادگیری جامع را برای کاربرانی که قصد توسعه مهارت‌های خود در زمینه سرور دارند، ارائه می‌دهد. در این مقاله، خواننده با نحوه ساخت API‌ها، ایجاد کانتینرها، استقرار کد، راه‌اندازی سرورها و دیگر فعالیت‌های مرتبط آشنا می‌شود. فرآیند یادگیری به گونه‌ای طراحی شده است که پوشش دهنده تمام جنبه‌های تکنیکی مورد نیاز برای مدیریت و بهینه‌سازی عملکرد سرورها باشد. مقاله بر تعادل بین نظریه و عملی تأکید دارد و به خوانندگان این امکان را می‌دهد که با انجام تمرین‌های عملی دانش خود را به طور مؤثر تقویت کنند. این محتوا برای توسعه‌دهندگان نرم‌افزار، مدیران سیستم و هر فرد دیگری که به دنبال افزایش دانش فنی خود در زمینه سرور و زیرساخت‌های مرتبط هستند، مناسب است.

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


👑 @gopher_academy
🍓1
🔵 عنوان مقاله
Memos: A Privacy-First Go-Powered Note Taking App

🟢 خلاصه مقاله:
مقاله‌ای که بررسی شده، در مورد یک برنامه وب نوت‌برداری است کە می‌توانید به صورت شخصی میزبانی کنید و به طور مکرر به‌روزرسانی می‌شود. این برنامه وب تحت لیسانس MIT قرار دارد و از چارچوب Echo برای توسعۀ خود استفاده می‌کند. اطلاعات درون برنامه در یک فایل SQLite ذخیره می‌شوند. علاوه بر این، کد منبع برنامه در GitHub قابل دسترسی است. این اطلاعات می‌توانند به توسعه‌دهندگان کمک کنند تا راه‌اندازی وانتقال داده‌ها را به صورت مؤثرتر انجام دهند. تأکید اصلی روی قابلیت به‌روزرسانی مکرر و استفاده آسان از اطلاعات در محیط‌های مختلف است.

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


👑 @gopher_academy
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
1👍2🙏1
🔵 عنوان مقاله
templ: A Way to Build HTML with Go

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

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


👑 @gopher_academy
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
💘5👍1
در نسخه 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://t.me/addlist/KpzXaiSpKENkMGM0
👍3🎉1🙏1
در نسخه‌های جدید زبان برنامه‌نویسی 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://t.me/addlist/KpzXaiSpKENkMGM0
👍4🎉1🏆1
در نسخه‌های جدید زبان برنامه‌نویسی 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://t.me/addlist/KpzXaiSpKENkMGM0
👨‍💻4🍾1
در نسخه‌های جدید زبان برنامه‌نویسی 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://t.me/addlist/KpzXaiSpKENkMGM0
🍓4🍾1
در نسخه‌های جدید زبان برنامه‌نویسی Go (Golang)، بهبودهای قابل توجهی در ابزارها و قابلیت‌های مرتبط با تست‌ها و احراز هویت (authentication) انجام شده است. در اینجا به دو بهبود مهم اشاره می‌کنیم:

---

### ۱. خروجی JSON برای `go test`:
یکی از بهبودهای مهم در ابزار تست Go، پشتیبانی از خروجی JSON برای نتایج تست‌ها است. این قابلیت تحلیل و گزارش‌گیری از تست‌ها را بسیار ساده‌تر و لذت‌بخش‌تر می‌کند.

#### ویژگی‌های کلیدی:
- خروجی ساختارمند: نتایج تست‌ها به صورت JSON ارائه می‌شوند که باعث می‌شود تحلیل و پردازش آن‌ها به‌طور خودکار ساده‌تر شود.
- سازگاری با ابزارهای گزارش‌گیری: خروجی JSON با ابزارهای گزارش‌گیری و تحلیل تست (مانند CI/CD pipelines) به‌طور کامل سازگار است.
- جزئیات بیشتر: خروجی JSON شامل اطلاعات دقیق‌تری مانند زمان اجرای هر تست، وضعیت (pass/fail)، و پیام‌های خطا است.

#### نحوه استفاده:
برای دریافت خروجی JSON از go test`، می‌توانید از فلگ -json` استفاده کنید:

go test -json ./...


#### مثال خروجی JSON:
{
"Time": "2023-10-01T12:34:56Z",
"Action": "run",
"Package": "example.com/myproject",
"Test": "TestSomething",
"Output": "=== RUN TestSomething\n"
}
{
"Time": "2023-10-01T12:34:57Z",
"Action": "pass",
"Package": "example.com/myproject",
"Test": "TestSomething",
"Elapsed": 0.12
}


#### مزایا:
- تحلیل خودکار: می‌توانید از ابزارهای تحلیل JSON (مانند jq) برای پردازش نتایج تست‌ها استفاده کنید.
- یکپارچه‌سازی با CI/CD: خروجی JSON به راحتی با سیستم‌های CI/CD (مانند GitHub Actions, GitLab CI, Jenkins) یکپارچه می‌شود.
- گزارش‌گیری پیشرفته: می‌توانید گزارش‌های دقیق‌تری از تست‌ها ایجاد کنید و آن‌ها را در داشبوردهای مختلف نمایش دهید.

---

### ۲. GOAUTH: احراز هویت آسان‌تر برای ریپوزیتوری‌های خصوصی:
قابلیت جدید GOAUTH به توسعه‌دهندگان اجازه می‌دهد تا به راحتی به ریپوزیتوری‌های خصوصی (مانند GitHub Private Repositories) متصل شوند. این قابلیت فرآیند احراز هویت را ساده‌تر و امن‌تر می‌کند.

#### ویژگی‌های کلیدی:
- پشتیبانی از چندین ارائه‌دهنده: GOAUTH از ارائه‌دهندگان مختلفی مانند GitHub, GitLab, Bitbucket و غیره پشتیبانی می‌کند.
- مدیریت توکن‌ها: می‌توانید توکن‌های دسترسی (access tokens) را به‌طور امن مدیریت کنید.
- سازگاری با `go get` و `go mod`: GOAUTH به‌طور کامل با ابزارهای مدیریت وابستگی Go (مانند go get و go mod) یکپارچه شده است.

#### نحوه استفاده:
برای استفاده از GOAUTH، کافی است توکن دسترسی خود را در فایل پیکربندی Go قرار دهید. به عنوان مثال:

# تنظیم توکن دسترسی برای GitHub
export GOPRIVATE=github.com/myorg/*
export GOAUTH_TOKEN=ghp_your_github_token_here


#### مثال استفاده با go get:
go get github.com/myorg/private-repo


#### مزایا:
- امنیت بهتر: توکن‌های دسترسی به‌طور امن مدیریت می‌شوند و نیازی به ذخیره آن‌ها در کد نیست.
- ساده‌سازی فرآیند: دیگر نیازی به تنظیمات دستی برای احراز هویت نیست.
- پشتیبانی از چندین ارائه‌دهنده: می‌توانید از GOAUTH برای اتصال به ریپوزیتوری‌های خصوصی در GitHub, GitLab, Bitbucket و غیره استفاده کنید.

---

### ۳. نتیجه‌گیری:
- خروجی JSON برای `go test` تحلیل و گزارش‌گیری از تست‌ها را بسیار ساده‌تر و لذت‌بخش‌تر می‌کند.
- GOAUTH فرآیند احراز هویت برای ریپوزیتوری‌های خصوصی را ساده‌تر و امن‌تر می‌کند.

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


https://t.me/addlist/KpzXaiSpKENkMGM0
👍4🍾2🔥1👨‍💻1
🔵 عنوان مقاله
Go Developer Survey 2024 H2 Results

🟢 خلاصه مقاله:
خلاصه‌ی گزارش جامعه‌ی برنامه‌نویسی Go از نظرسنجی اخیرشان نشان می‌دهد که بیش از 4000 پاسخ از توسعه‌دهندگان تجزیه و تحلیل شده است و نشان دهنده‌ی رضایت زیاد آن‌ها از جهت‌گیری زبان Go است، اما بزرگترین چالش آن‌ها حفظ استانداردهای کدنویسی یکسان است. در زمینه‌ی سیستم‌عامل، Linux و macOS پیشتازند، در حالی که در زمینه‌ی محیط‌های توسعه، VS Code و GoLand محبوب‌ترین‌ها هستند و در بخش ابری، AWS بیشترین استفاده را دارد. همچنین آمارهای جالبی در مورد میزان استفاده توسعه‌دهندگان Go از LLM (مدل‌های زبان بزرگ) ارائه شده است.

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


👑 @gopher_academy
👍3
🔵 عنوان مقاله
Rust vs Go in 2025

🟢 خلاصه مقاله:
مقاله‌ بررسی به‌روزی در مورد موضوعی است که جان به طور مکرر به آن پرداخته، و به همان نتیجه همیشگی می‌رسد: ارزش دانستن هر دو زبان وجود دارد. اگرچه ممکن است محتوای دقیق مقاله‌ای نامشخص باشد، اما پیام کلی و قدرت استدلال در مورد اهمیت دوزبانگی آشکار است. جان در این مقاله به این نکته تأکید می‌کند که دانستن دو زبان فواید متعددی دارد، مانند افزایش دسترسی به فرصت‌های شغلی، بهبود توانایی‌های فکری و ارتباطی، و درک بهتر فرهنگ‌های مختلف. این مقاله تأکید می‌کند که با وجود تکرار موضوع، اهمیت آن هرگز کهنه نمی‌شود و همواره معتبر و قابل توجه است.

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


👑 @gopher_academy
👍3
🔵 عنوان مقاله
Build Go Apps using Project IDX and the Gemini API

🟢 خلاصه مقاله:
مقاله‌ای که مورد بررسی قرار گرفته به معرفی و توضیح IDX، یک محیط کار آنلاین مبتنی بر هوش مصنوعی توسعه یافته توسط Google برای توسعه برنامه‌های کاربردی به صورت فول-استک می‌پردازد. IDX ابزارها و امکانات متنوعی را برای کاربران و توسعه‌دهندگان نرم‌افزار فراهم می‌آورد تا بتوانند به طور مؤثری بر روی پروژه‌های خود کار کنند. در این مقاله، راهنمای گام به گامی برای شروع کار با IDX به ویژه برای کدنویسی با زبان برنامه‌نویسی Go ارائه شده است. نکات عمده در این مقاله شامل چگونگی آغاز به کار با IDX، مزایای استفاده از این پلتفرم در توسعه برنامه‌های کاربردی و توصیه‌هایی برای بهره‌برداری بهینه از امکانات آن می‌باشد. این مقاله هدف دارد که توسعه‌دهندگان را با ابزارهای لازم و دانش کافی مجهز کند تا بتوانند پروژه‌های توسعه نرم‌افزاری خود را با کارایی بالا پیش ببرند.

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


👑 @gopher_academy
🔵 عنوان مقاله
Pixel Federation Swaps MSK for WarpStream, Saves 83% on Kafka Costs

🟢 خلاصه مقاله:
در مقاله مورد بررسی، شرکت پیکسل فدریشن، تجربیات خود از جایگزینی AWS MSK با WarpStream را به اشتراک گذاشته است. این اقدام به طور قابل توجهی هزینه‌های مربوط به Kafka را کاهش داده و همچنین پیچیدگی‌های مرتبط با VPC peering را از بین برده است. VPC peering یکی از چالش‌های فنی است که در استفاده از AWS MSK وجود دارد و از طریق این تغییر، پیکسل فدریشن توانسته است عملیات‌های خود را ساده‌سازی کند. استفاده از WarpStream به عنوان یک راهکار جایگزین، به بهبود کارایی و کاهش هزینه‌های عملیاتی کمک کرده، و در نتیجه تأثیر مثبتی بر ROI (بازگشت سرمایه) شرکت داشته است. این تغییر نمونه‌ای بارز از چگونگی بهره‌برداری از فناوری‌های نوین در بهینه‌سازی و افزایش بهره‌وری در محیط‌های کسب‌وکار است.

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


👑 @gopher_academy
🔵 عنوان مقاله
templ: A Way to Build HTML with Go

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

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


👑 @gopher_academy
👍1
🔵 عنوان مقاله
Go Developer Survey 2024 H2 Results

🟢 خلاصه مقاله:
در نتایج جدیدترین نظرسنجی جامعه Go که بر اساس تحلیل بیش از ۴۰۰۰ پاسخ به دست آمده است، توسعه‌دهندگان به طور کلی از جهت‌گیری زبان برنامه‌نویسی Go رضایت دارند. با این حال، این توسعه‌دهندگان اصلی‌ترین چالش را حفظ استانداردهای یکنواخت کدنویسی می‌دانند. در زمینه انتخاب سیستم‌عامل، Linux و macOS پیشتاز هستند، در حالی که VS Code و GoLand به عنوان IDE‌های محبوب، و AWS به عنوان برترین انتخاب در مورد سرویس‌های ابری شناخته شده است. همچنین آمارهای جالبی در مورد سطح استفاده توسعه‌دهندگان Go از مدل‌های LLM (مدل‌های زبانی بزرگ) ارائه شده است.

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


👑 @gopher_academy
👍3