Gopher Academy
3.32K subscribers
911 photos
40 videos
279 files
1.94K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72

ادمین تبلیغات:
@labdon_ads
Download Telegram
🔵 عنوان مقاله
go-taskflow: A Taskflow-Like DAG Task Execution Framework

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

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


👑 @gopher_academy
👍2
🔵 عنوان مقاله
Reduce Your Apache Kafka Costs + Ops Burden With WarpStream

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

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


👑 @gopher_academy
👍21🎉1
🔵 عنوان مقاله
Go Slice Gotchas

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

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


👑 @gopher_academy
👍31
Forwarded from Linux Labdon
Linux boot process explained

https://t.me/addlist/KpzXaiSpKENkMGM0
👍7
🔵 عنوان مقاله
sturdyc: Caching Library with Advanced Concurrency Features

🟢 خلاصه مقاله:
مقاله "A sturdy gopher shielding data sources from rapidly incoming requests" به بررسی یک راهکار مؤثر برای جلوگیری از بارگذاری بیش از حد و حملات اصطلاحاً cache stampede در سیستم‌های با حجم ترافیک بالا می‌پردازد. رویکرد مورد بحث در این مقاله، استفاده از خواندن‌های غیربلاک‌کننده و نوشتن‌های شارد شده است که کمینه کردن تداخل قفل‌ها را هدف قرار داده و در نتیجه، افزایش کارایی و پایداری سیستم هنگام مواجهه با درخواست‌های متعدد و سریع را به دنبال دارد. با استفاده از این روش، سیستم‌ها می‌توانند داده‌ها را مدیریت و در برابر بارهای ناگهانی وزیاد محافظت نمایند. این روش برای زیرساخت‌هایی که نیازمند حجم بالایی از تراکنش‌های داده هستند، ایده‌آل است.

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


👑 @gopher_academy
👇توصیه‌های کلی و کوتاه و مختصر برای زبان برنامه‌نویسی Go که یادگیری خالی از لطف نیست

https://go-proverbs.github.io


https://t.me/addlist/KpzXaiSpKENkMGM0
👍4🍾1💋1
Forwarded from Gopher Academy
🎯 چندتا پست در مورد ویژگی های جدید گولنگ 1.24 اینجاست می تونید بخونید👇


🔵 https://t.me/gopher_academy/3557

🔵 https://t.me/gopher_academy/3556

🔵 https://t.me/gopher_academy/3555

🔵 https://t.me/gopher_academy/3554

🔵 https://t.me/gopher_academy/3553

🔵 https://t.me/gopher_academy/3581

🔵 https://t.me/gopher_academy/3582


https://t.me/addlist/KpzXaiSpKENkMGM0
🔥1🎉1🏆1
👍5🔥1💘1
سپندارمذگان، روز گرامیداشت زن، زمین و مادر بر همهٔ ایرانیان خجسته باد.

💚🤍❤️
یکی از جشن‌های ایران باستان است که در ۵ اسفند گاه‌شمار یزدگردی و ۲۹ بهمن گاه‌شمار خورشیدی برای گرامیداشت زن، زمین و مادر برگزار می‌شود.[۱] این جشن ریشه در شاهنشاهی هخامنشی دارد.[۲] ابوریحان بیرونی در آثارالباقیه آورده‌است که ایرانیان باستان، پنجم اسفند را روز بزرگداشت زن و زمین می‌دانستند



https://t.me/addlist/KpzXaiSpKENkMGM0
161
Gopher Academy
### ۲. مزایای SwissTable:
- سرعت بیشتر: SwissTable با استفاده از تکنیک‌های بهینه‌سازی مانند SIMD (Single Instruction, Multiple Data) و cache-friendly data structures**، سرعت عملیات‌های درج، حذف و جستجو در `map` را افزایش می‌دهد.
SIMD مخفف Single Instruction, Multiple Data

(یک دستورالعمل، چندین داده) است. این یک تکنیک پردازشی است که در معماری کامپیوتر استفاده می‌شود و به پردازنده اجازه می‌دهد تا یک عملیات را همزمان روی چندین داده اجرا کند. این کار باعث افزایش کارایی و سرعت پردازش، به ویژه در عملیات‌های موازی مانند محاسبات برداری یا ماتریسی، می‌شود.


### توضیح بیشتر:


- Single Instruction:
یک دستورالعمل واحد به پردازنده داده می‌شود.

- Multiple Data:
این دستورالعمل به طور همزمان روی چندین داده (مثلاً چندین عنصر در یک آرایه) اعمال می‌شود.


### مثال:

فرض کنید می‌خواهید چهار عدد را با هم جمع کنید. در حالت عادی، پردازنده باید چهار بار عملیات جمع را انجام دهد. اما با استفاده از SIMD، می‌توانید این چهار عدد را به صورت موازی و در یک عملیات جمع کنید.


### کاربرد SIMD در SwissTable:

در SwissTable، از SIMD برای بهینه‌سازی عملیات‌هایی مانند جستجو، درج و حذف استفاده می‌شود. به این صورت:
- جستجو: با استفاده از SIMD، می‌توان چندین کلید را به طور همزمان بررسی کرد و سرعت جستجو را افزایش داد.
- درج و حذف: عملیات‌های مرتبط با مدیریت داده‌ها نیز می‌توانند به صورت موازی انجام شوند.


### مزایای SIMD:

1. سرعت بیشتر: انجام عملیات‌ها به صورت موازی باعث کاهش زمان اجرا می‌شود.
2. بهینه‌سازی مصرف انرژی: با کاهش تعداد دستورالعمل‌ها، انرژی کمتری مصرف می‌شود.
3. کارایی بالا: به ویژه در عملیات‌های تکراری و محاسبات سنگین، کارایی سیستم افزایش می‌یابد.

### معایب SIMD:

1. پیچیدگی: برنامه‌نویسی با SIMD نیاز به دانش خاص و توجه به جزئیات دارد.
2. وابستگی به سخت‌افزار: برای استفاده از SIMD، پردازنده باید از این قابلیت پشتیبانی کند.

در کل، SIMD یک تکنیک قدرتمند برای افزایش سرعت و کارایی در عملیات‌های موازی است و در SwissTable نیز از آن برای بهبود عملکرد map استفاده شده است.


https://t.me/addlist/KpzXaiSpKENkMGM0
4👍1
Forwarded from Software Engineer Labdon
با پیشرفت روزافزون کدنویسی با هوش مصنوعی، مهندسان نرم‌افزار باید توانایی‌های زیر را داشته باشند:

۱- توانایی بررسی سریع و دقیق کد نوشته شده توسط هوش مصنوعی
۲- توانایی توصیف مشکلات به‌صورت واضح و کامل
۳- توانایی انجام هم‌زمان چند کار و تغییر سریع بین زمینه‌های مختلف
خوب است که از حالا این مهارت‌ها را تمرین کنید!

<Mehdi Allahyari/>
👍4👏1🎉1
Forwarded from omid trade 360
🔵 عنوان مقاله
JIO Platforms collaborates with Polygon Labs (1 minute read)

🟢 خلاصه مقاله:
JIO Platforms، یکی از بزرگ‌ترین اپراتورهای تلفن همراه در هند، با شرکت Polygon شراکت کرده است تا با استفاده از راهکارهای بلاک چین ارائه شده توسط Polygon، قابلیت‌های Web3 را به خدمات خود اضافه کند. هدف از این شراکت این است که تجربه‌های دیجیتالی نوآورانه و بهبود یافته‌ای را برای بیش از 450 میلیون مشتری JIO فراهم آورد. این اقدام به منظور تقویت پیشرفت‌های تکنولوژیک و استفاده از فرصت‌های پیشرو در عرصه جدید وب (Web3) انجام می‌گیرد و به JIO این امکان را می‌دهد که از مزایای بلاک چین، شامل امنیت و شفافیت بیشتر در خدمات دیجیتالی خود بهره‌مند شود. انتظار می‌رود این همکاری بتواند نقش مهمی در توسعه تجارت دیجیتالی در هند ایفا کند و پیشگام در پیاده‌سازی تکنولوژی‌های نوین در این کشور شود.

🟣لینک مقاله:
https://polygon.technology/blog/jio-platforms-ltd-is-collaborating-with-polygon-labs-to-bring-web3-capabilities-to-450-million-jio-users?&amp;utm_source=tldrcrypto


👑 @Blockchain_labdon
👍1👏1
در Go (یا Golang)، گوروتین‌ها (goroutines) واحدهای سبک‌وزنی هستند که به صورت همزمان (concurrent) اجرا می‌شوند. هر گوروتین به طور مستقل اجرا می‌شود و مدیریت آن‌ها توسط زمان‌بند (scheduler) زبان Go انجام می‌گیرد.

وقتی شما یک مکانیزم ریکاوری (recovery mechanism) در گوروتین اصلی (main goroutine) قرار می‌دهید، این مکانیزم فقط برای خطاهایی که در همان گوروتین اصلی رخ می‌دهند، عمل می‌کند. این مکانیزم به طور خودکار روی گوروتین‌های فرزند (child goroutines) تأثیری ندارد. دلیل این موضوع به شرح زیر است:

---

### ۱. گوروتین‌ها مستقل هستند:
هر گوروتین یک واحد اجرایی مستقل است. اگر یک گوروتین فرزند دچار panic شود، این panic فقط روی همان گوروتین تأثیر می‌گذارد و به گوروتین‌های دیگر (از جمله گوروتین اصلی) سرایت نمی‌کند. بنابراین، مکانیزم ریکاوری که در گوروتین اصلی قرار داده‌اید، نمی‌تواند panic گوروتین‌های فرزند را بگیرد.

---

### ۲. panic و recover در Go:
- `panic`:
باعث توقف اجرای برنامه در گوروتین فعلی می‌شود و اگر recover نشود، کل برنامه را متوقف می‌کند.
- `recover`:
فقط panic‌هایی را می‌تواند بگیرد که در همان گوروتین رخ داده‌اند. اگر panic در یک گوروتین فرزند رخ دهد و در آن گوروتین recover نشود، panic به گوروتین اصلی منتقل نمی‌شود و باعث crash برنامه می‌شود.

---

### ۳. مثال برای درک بهتر:

package main

import (
"fmt"
"time"
)

func main() {
// مکانیزم ریکاوری در گوروتین اصلی
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in main goroutine:", r)
}
}()

// ایجاد یک گوروتین فرزند
go func() {
fmt.Println("Child goroutine started")
panic("Something went wrong in child goroutine!") // panic در گوروتین فرزند
}()

// منتظر بمانید تا گوروتین فرزند اجرا شود
time.Sleep(1 * time.Second)
fmt.Println("Main goroutine finished")
}


#### خروجی:
Child goroutine started
panic: Something went wrong in child goroutine!

goroutine 6 [running]:
main.main.func2()
/path/to/file.go:14 +0x95
created by main.main
/path/to/file.go:12 +0x4c


#### توضیح:
- panic در گوروتین فرزند رخ داده است.
- مکانیزم ریکاوری در گوروتین اصلی (main) هیچ تأثیری روی panic گوروتین فرزند ندارد.
- برنامه crash می‌کند، زیرا panic در گوروتین فرزند recover نشده است.

---

### ۴. چگونه panic گوروتین‌های فرزند را recover کنیم؟

برای اینکه panic گوروتین‌های فرزند را بگیرید، باید در هر گوروتین فرزند یک مکانیزم ریکاوری قرار دهید. به این ترتیب، هر گوروتین به طور مستقل panic خود را مدیریت می‌کند.

#### مثال اصلاح‌شده:

package main

import (
"fmt"
"time"
)

func main() {
// مکانیزم ریکاوری در گوروتین اصلی
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in main goroutine:", r)
}
}()

// ایجاد یک گوروتین فرزند با مکانیزم ریکاوری
go func() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in child goroutine:", r)
}
}()
fmt.Println("Child goroutine started")
panic("Something went wrong in child goroutine!") // panic در گوروتین فرزند
}()

// منتظر بمانید تا گوروتین فرزند اجرا شود
time.Sleep(1 * time.Second)
fmt.Println("Main goroutine finished")
}


#### خروجی:
Child goroutine started
Recovered in child goroutine: Something went wrong in child goroutine!
Main goroutine finished


#### توضیح:
- panic در گوروتین فرزند رخ داده است.
- مکانیزم ریکاوری در گوروتین فرزند panic را گرفته و برنامه crash نمی‌کند.
- گوروتین اصلی به کار خود ادامه می‌دهد.

---

### ۵. نکات مهم:
- هر گوروتین باید به طور مستقل panic خود را مدیریت کند.
- اگر panic در یک گوروتین فرزند recover نشود، کل برنامه crash می‌کند.
- برای جلوگیری از crash برنامه، حتماً در هر گوروتین فرزند یک مکانیزم ریکاوری قرار دهید.

---

### جمع‌بندی:
مکانیزم ریکاوری که در گوروتین اصلی قرار می‌دهید، فقط panic‌های همان گوروتین را می‌گیرد و روی گوروتین‌های فرزند تأثیری ندارد. برای مدیریت panic در گوروتین‌های فرزند، باید در هر گوروتین فرزند یک مکانیزم ریکاوری جداگانه قرار دهید. این کار باعث می‌شود برنامه شما در برابر خطاها مقاوم‌تر شود و crash نکند.


https://t.me/addlist/KpzXaiSpKENkMGM0
3👌3👍2🎉1
👍7💋1
https://antonz.org/go-concurrency/

antonz.org
Gist of Go: Concurrency
Interactive book on concurrent programming with many exercises.


https://t.me/addlist/KpzXaiSpKENkMGM0
👍3
📢 اگر تلگرام پرمیوم دارید، کانال ما رو Boost کنید ! 🚀

با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙

https://t.me/boost/gopher_academy
🍾4
در Go، دو ساختار select و switch برای کنترل جریان برنامه استفاده می‌شوند، اما کاربردهای متفاوتی دارند:

https://t.me/addlist/KpzXaiSpKENkMGM0
👍4🙏1👻1💘1
Gopher Academy
https://antonz.org/go-concurrency/ antonz.org Gist of Go: Concurrency Interactive book on concurrent programming with many exercises. https://t.me/addlist/KpzXaiSpKENkMGM0
کتاب "Gist of Go: Concurrency"

نوشته آنتون ژیانوف یه منبع تعاملی و کاربردی برای یادگیری برنامه‌نویسی هم‌روند (Concurrency) در زبان گولنگه. این کتاب به جای اینکه فقط مفاهیم تئوری مثل گوروتین‌ها، کانال‌ها و سلکت رو توضیح بده، از طریق تمرین‌های عملی و ساده (که هر کدوم تو یه صفحه جا می‌شن) شما رو از صفر تا تسلط به ابزارهای هم‌روندی گولنگ می‌رسونه. این تمرین‌ها به شکلی طراحی شدن که به سناریوهای واقعی نزدیک باشن و برای برنامه‌نویسایی که با اصول اولیه گولنگ آشنا هستن، عالیه—نیازی به دانش قبلی از هم‌روندی ندارید چون همه‌چیز قدم به قدم آموزش داده می‌شه.



کتاب روی درک عمیق و کاربرد عملی ابزارهای هم‌روندی تمرکز داره و با مثال‌های تعاملی تو مرورگر، یادگیری رو جذاب‌تر می‌کنه. بخش‌هایی مثل گوروتین‌ها، کانال‌ها، پایپ‌لاین‌ها، مدیریت زمان، کانتکست و گروه‌های انتظار رو پوشش می‌ده و هنوز در حال تکمیله (تا حالا ۶ فصل از ۱۲ فصلش منتشر شده). اگه دنبال یه راهنمای جمع‌وجور و متمرکز برای ساخت برنامه‌های مقیاس‌پذیر و کارآمد با گولنگ هستید، این کتاب یه انتخاب قوی و متفاوت نسبت به آموزش‌های معمولیه.


👑 @gopher_academy
👍51🎉1
🔵 عنوان مقاله
GoChromecast: Discover Devices and Stream Media to Chromecast Devices

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

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


👑 @gopher_academy
👍1
🔵 عنوان مقاله
Minecraft From Scratch: A Simple Go Minecraft Clone

🟢 خلاصه مقاله:
این مقاله به توصیف یک پروژه جذاب می‌پردازد که هدف آن بازآفرینی مناظر بی‌پایان و قابل ناوبری تولیدشده به طور خودکار در بازی Minecraft با استفاده از زبان برنامه نویسی Go و کتابخانۀ گرافیکی OpenGL 4.1 است. برای اتصال برنامه نویسی Go به OpenGL از برندگی go-gl/gl استفاده شده که نیازمند استفاده از cgo (یک ابزار در زبان Go برای اتصال به کتابخانه‌های C) است. این پروژه به توسعه‌دهندگان و طرفداران Minecraft فرصتی می‌دهد تا دانش خود را در زمینه گرافیک کامپیوتری تعمیق بخشند و همچنین با عملکردهای پیچیدۀ ریاضی و الگوریتم‌های تولید پروسیجرال (خودکار) آشنا شوند. این مطالعه می‌تواند درک عمیق‌تری از چالش‌ها و فرصت‌های موجود در توسعه بازی‌های ویدیویی بر پایه تکنولوژی‌های جدید را ارائه دهد.

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


👑 @gopher_academy
2🏆1