Gopher Academy
3.28K subscribers
897 photos
40 videos
279 files
1.83K links
🕸 Gopher Academy

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

لینک چنل های ما:
https://linktr.ee/Labdon

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

ادمین:
@mrbardia72

ادمین تبلیغات:
@labdon_ads
Download Telegram
describe two categories of Go types:👆🏾

👑 @gopher_academy
Gopher Academy
describe two categories of Go types:👆🏾 👑 @gopher_academy
در زبان Go، انواع داده‌ها را می‌توان به دو دسته تقسیم کرد:

### 1. انواعی که در یک بلوک حافظه ذخیره می‌شوند (Solo Direct Value Part)
این دسته شامل boolean، عددی، اشاره‌گر، struct، array و unsafe pointer است. مقدار این انواع به‌صورت مستقیم در حافظه ذخیره می‌شود، به این معنی که مقدار آن‌ها در همان متغیر قرار دارد و به بخش دیگری از حافظه ارجاع نمی‌دهد.

### 2. انواعی که در چندین بلوک حافظه ذخیره می‌شوند (Direct Part → Underlying Part)
این دسته شامل slice، map، channel، function، interface و string است. مقدار واقعی این داده‌ها در یک بخش دیگر از حافظه ذخیره می‌شود و متغیر تنها یک ارجاع (reference) به آن مقدار دارد.

به‌عنوان‌مثال، یک slice شامل سه بخش است:
- pointer (به آرایه‌ای که داده‌ها را ذخیره می‌کند)
- length (تعداد عناصر)
- capacity (ظرفیت آرایه)

هنگامی که شما یک slice را به متغیر دیگری اختصاص می‌دهید، تنها ارجاع کپی می‌شود، نه داده‌های داخل آن. این رفتار در مورد map`، `channel`، `string و سایر انواع این دسته نیز صدق می‌کند.

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

👑 @gopher_academy

🔵 دنیای بلاکچین و ارز های دیجیتال
🔴 @Blockchain_labdon

🟢 حوزه های تحت پوشش
(Bitcoin,

Ethereum,

Altcoins,

Blockchain,

Policy & Regulations,

NFTs,

DeFi)


🔵 مهندسی نرم افزار
🔴 @software_labdon

🟢 حوزه های تحت پوشش
(Engineering,

Architecture,

Design,

Testing,

Security ,

QA)


🔵 لینوکس- از توزیع‌ها تا ترفندهای امنیتی

🔴 @linux_labdon

🟢 حوزه های تحت پوشش
(Linux Distributions,

Open Source Software,

Security Tips ,

New Releases & Features)


🔵 دوآپـس - ابزارها و روندهای جدید

🔴 @devops_labdon

🟢 حوزه های تحت پوشش
(CI/CD Pipelines,

Cloud Infrastructure,

Containerization & Orchestration,

Monitoring & Performance,

Infrastructure as Code,

Security in DevOps)
🔵 عنوان مقاله
go-taskflow: A Taskflow-Like DAG Task Execution Framework

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

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


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

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

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


👑 @gopher_academy
🔵 عنوان مقاله
Go Slice Gotchas

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

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


👑 @gopher_academy
Forwarded from Linux Labdon
Linux boot process explained

https://t.me/addlist/KpzXaiSpKENkMGM0
🔵 عنوان مقاله
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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Software Labdon
با پیشرفت روزافزون کدنویسی با هوش مصنوعی، مهندسان نرم‌افزار باید توانایی‌های زیر را داشته باشند:

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

<Mehdi Allahyari/>
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
در 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
https://antonz.org/go-concurrency/

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


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

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

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

https://t.me/addlist/KpzXaiSpKENkMGM0