Gopher Academy
3.31K 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
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
بدرود اسکایپ 💐
🔥10🍾6👌1🕊1🐳1
ادیتور Zed

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

این ادیتور با زبان Rust نوشته شده که باعث می‌شه عملکرد فوق‌العاده‌ای داشته باشه، مخصوصاً نسبت به ادیتور مثل VS Code  هست و گاهی کند به نظر میان.

بریم یه نگاه کلی بهش بندازیم:

نقاط قوت:
- سرعت دیوانه‌وار:
چون از Rust و یه فریم‌ورک رندر GPU-based (به اسم GPUI) استفاده می‌کنه، باز کردن فایل‌ها، تایپ کردن و جابه‌جایی توی کد تقریباً آنی حس می‌شه. برای پروژه‌های بزرگ یا سیستم‌های ضعیف‌تر، این یه مزیت بزرگه.

- همکاری تیمی:
این Zed از همون اول با قابلیت همکاری چندنفره (multiplayer) طراحی شده. می‌تونی با تیمت به‌صورت زنده کد بزنی، چت کنی یا حتی صفحه‌ت رو به اشتراک بذاری—بدون نیاز به افزونه جدا.

- مینیمال و ساده:
رابط کاربریش خلوت و متمرکزه، بدون شلوغی‌های اضافی. برای کسایی که از پیچیدگی VS Code خسته شدن، حس تازگی داره.

- پشتیبانی:
خیلی از ویژگی‌ها (مثل Git، و یا هایلایت سینتکس) به‌صورت پیش‌فرض توش هستن و نیازی به نصب افزونه‌های متعدد نداری.

- اوپن‌سورس:
از سال 2024 به‌صورت متن‌باز دراومده و جامعه می‌تونه به توسعه‌ش کمک کنه.

نقاط ضعف:
- پشتیبانی محدود از سیستم‌عامل‌ها:
فعلاً فقط روی macOS و Linux رسمی کار می‌کنه (هرچند برای Windows هم راه‌حل‌های غیررسمی هست). اگه ویندوزی هستی، ممکنه برات دردسر بشه.😅

- اکوسیستم در حال رشد:
هنوز افزونه‌ها و زبان‌های پشتیبانی‌شده‌ش به اندازه VS Code یا JetBrains گسترده نیستن.
مثلاً اگه زبانی خاص کار می‌کنی، ممکنه LSP مناسبش هنوز کامل نباشه.

- کمبود بعضی ابزارها:
دیباگر داخلی هنوز به بلوغ نرسیده و برای بعضی‌ها یه خلا بزرگه (هرچند دارن روش کار می‌کنن).

- منحنی یادگیری:
اگه عادت به Vim داری، حالت Vim Mode داره، ولی کاملاً شبیه Neovim نیست و ممکنه نیاز به تطبیق داشته باشی.

نظر شخصی: 
به نظرم Zed یه نفس تازه تو دنیای ادیتورهاست. اگه سرعت و همکاری تیمی برات اولویت داره، یا دنبال یه جایگزین سبک‌تر برای VS Code هستی، حتماً ارزش امتحان کردن داره. اما اگه وابسته به اکوسیستم غنی افزونه‌ها یا دیباگینگ پیشرفته هستی، شاید هنوز به بلوغ کافی نرسیده باشه که کاملاً جایگزین ابزارهای اصلیت بشه. شنیدم بعضی‌ها (مثلاً توی پست‌های X) از سرعتش خیلی تعریف کردن و امیدوارن با اضافه شدن دیباگر، حتی از Neovim هم ردش کنن—که ادعای بزرگیه!



👑 @gopher_academy
🔥5👍41🕊1🍾1
موج سواری ملت بازم در لینک دین شروع شده

اون از قضیه
فلای تودی


اینم از قضیه تعدیل شدن ۴۰ نفر از بچه های
شب


حال قضیه موج سواری اینه که
الان رگ غیرت خیلی ها باد کرده براشون پست گذاشتن

مثلن الان فقط این ۴۰ نفر بیکار هستن تو مملکت؟

مابقی چی پس؟

یه نکته بگم:

شرایط برای همه سخته
همه دنبال کارن
اما با این پست های که توی لینکدین میبینم انگار مابقی مهم نیستن
فقط این افراد

هوای همو داشته باشیم نه یک گروه خاص رو

https://t.me/addlist/KpzXaiSpKENkMGM0
👍262🔥2🍾1