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 را به متغیر دیگری اختصاص میدهید، تنها ارجاع کپی میشود، نه دادههای داخل آن. این رفتار در مورد
مزیت این ساختار این است که میتواند از مدیریت حافظه بهینهتر پشتیبانی کند، اما در عوض نیازمند کنترل دقیقتر هنگام اشتراکگذاری دادهها میان بخشهای مختلف برنامه است.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
### 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)
🔵 دنیای بلاکچین و ارز های دیجیتال
🔴 @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
go-taskflow: A Taskflow-Like DAG Task Execution Framework
🟢 خلاصه مقاله:
مقالهای که مد نظر است به بررسی و توصیف یک چارچوبی عمومی برای زبان برنامهنویسی Go پرداخته است که برای مدیریت وابستگی در کارهای همزمان ساخته شده است. این چارچوب به شکلی طراحی شده که قادر است فعالیتهای موازی را بر اساس وظایف مشخص شامل تعاملات پیچیده وابستگی انجام دهد. هدف اصلی از توسعه این چارچوب، بهبود بهرهوری در برنامههایی است که نیاز به اجرای همزمان چندین عملیات دارند، بطوری که هر وظیفه میتواند به شکل مستقل و با در نظر گرفتن وابستگیهای معین با دیگر وظایف، پیش برود. با استفاده از این چارچوب، توسعهدهندگان میتوانند کاراییهای برنامههای خود را بهبود بخشیده و اتکا به مدیریت دستی وابستگیها را کاهش دهند. این چارچوب همچنین پیادهسازیهای معمولاً پیچیده در مدیریت همزمانی را بهبود میبخشد و بستری انعطافپذیر برای توسعه نرمافزار فراهم میآورد.
🟣لینک مقاله:
https://golangweekly.com/link/165667/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - noneback/go-taskflow: A pure go General-purpose Task-parallel Programming Framework with integrated visualizer and profiler
A pure go General-purpose Task-parallel Programming Framework with integrated visualizer and profiler - noneback/go-taskflow
🔵 عنوان مقاله
Reduce Your Apache Kafka Costs + Ops Burden With WarpStream
🟢 خلاصه مقاله:
مقاله مورد بحث به معرفی WarpStream میپردازد، یک تکنولوژی که هزینههای استفاده از Kafka را با کاهش نیاز به دیسکها و هزینههای شبکه بینمنطقهای بیش از 80 درصد کاهش میدهد. این تکنولوژی قابل اجرا در ابر خصوصی است و دادهها در بستر ذخیرهسازی اشیاء مشتری ذخیره میشوند، بنابراین دادههای خام هرگز محیط شما را ترک نمیکنند. WarpStream همچنین قابلیت اتوماتیک نگهداری و اسکیلگیری خودکار را بدون نیاز به اپراتور یا تنظیمات اضافی دارا میباشد، نقطه قوتی که مدیریت دادهها و برنامهها را به شدت ساده و کم هزینه میکند. این نوآوریها در مهندسی و معماری ابری میتواند به طور قابل توجهی بر بهرهوری و صرفهجویی در هزینههای مرتبط با پردازش داده تأثیر بگذارد.
🟣لینک مقاله:
https://golangweekly.com/link/165640/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Reduce Your Apache Kafka Costs + Ops Burden With WarpStream
🟢 خلاصه مقاله:
مقاله مورد بحث به معرفی WarpStream میپردازد، یک تکنولوژی که هزینههای استفاده از Kafka را با کاهش نیاز به دیسکها و هزینههای شبکه بینمنطقهای بیش از 80 درصد کاهش میدهد. این تکنولوژی قابل اجرا در ابر خصوصی است و دادهها در بستر ذخیرهسازی اشیاء مشتری ذخیره میشوند، بنابراین دادههای خام هرگز محیط شما را ترک نمیکنند. WarpStream همچنین قابلیت اتوماتیک نگهداری و اسکیلگیری خودکار را بدون نیاز به اپراتور یا تنظیمات اضافی دارا میباشد، نقطه قوتی که مدیریت دادهها و برنامهها را به شدت ساده و کم هزینه میکند. این نوآوریها در مهندسی و معماری ابری میتواند به طور قابل توجهی بر بهرهوری و صرفهجویی در هزینههای مرتبط با پردازش داده تأثیر بگذارد.
🟣لینک مقاله:
https://golangweekly.com/link/165640/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Warpstream
Bring Your Own Cloud Kafka-Compatible Data Streaming
WarpStream's BYOC deployment model gives you the security and data sovereignty benefits of self hosting, but without any of the management hassle.
🔵 عنوان مقاله
Go Slice Gotchas
🟢 خلاصه مقاله:
مقالهای که به بررسی ساختار دادهای به نام "اسلایس" میپردازد، نشان میدهد که این ساختار مشابه سایر ساختارهای ظرفیتگسترشپذیر دینامیک دارای پیچیدگیها و نکات خاص خود است. نویسنده در این متن تلاش کرده است تا لیستی از اشتباهات رایجی که خود بارها مرتکب شده را برشمارد تا خوانندگان بتوانند از آنها پرهیز کنند. این اشتباهات شامل نادیدهگرفتن قواعد خاص مدیریت حافظه، نحوه افزایش ظرفیت اسلایسها، و تأثیر عملیات مختلف بر روی امنیت و کارایی برنامه است. هدف از این مقاله علاوه بر ارائه راهنماییهای فنی، افزایش آگاهی و پرورش مهارتهای برنامهنویسان در کار با اسلایسها و جلوگیری از تکرار اشتباهات متداول است.
🟣لینک مقاله:
https://golangweekly.com/link/165652/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Go Slice Gotchas
🟢 خلاصه مقاله:
مقالهای که به بررسی ساختار دادهای به نام "اسلایس" میپردازد، نشان میدهد که این ساختار مشابه سایر ساختارهای ظرفیتگسترشپذیر دینامیک دارای پیچیدگیها و نکات خاص خود است. نویسنده در این متن تلاش کرده است تا لیستی از اشتباهات رایجی که خود بارها مرتکب شده را برشمارد تا خوانندگان بتوانند از آنها پرهیز کنند. این اشتباهات شامل نادیدهگرفتن قواعد خاص مدیریت حافظه، نحوه افزایش ظرفیت اسلایسها، و تأثیر عملیات مختلف بر روی امنیت و کارایی برنامه است. هدف از این مقاله علاوه بر ارائه راهنماییهای فنی، افزایش آگاهی و پرورش مهارتهای برنامهنویسان در کار با اسلایسها و جلوگیری از تکرار اشتباهات متداول است.
🟣لینک مقاله:
https://golangweekly.com/link/165652/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Redowan's Reflections
Go slice gotchas
Just like any other dynamically growable container structure, Go slices come with a few
gotchas. I don’t always remember all the rules I need to be aware of. So this is an attempt
to list some of the most common mistakes I’ve made at least once.
Slices are…
gotchas. I don’t always remember all the rules I need to be aware of. So this is an attempt
to list some of the most common mistakes I’ve made at least once.
Slices are…
Forwarded from Linux Labdon
🔵 عنوان مقاله
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
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
GitHub
GitHub - viccon/sturdyc: A caching library with advanced concurrency features designed to make I/O heavy applications robust and…
A caching library with advanced concurrency features designed to make I/O heavy applications robust and highly performant - viccon/sturdyc
👇توصیههای کلی و کوتاه و مختصر برای زبان برنامهنویسی Go که یادگیری خالی از لطف نیست
https://go-proverbs.github.io
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
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
🔵 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
Gopher Academy
در نسخه 1.24 زبان برنامهنویسی Go (Golang)، ویژگی جدیدی به نام SwissTable به عنوان بخشی از بهبودهای مربوط به map (نوع دادهای دیکشنری یا associative array در Go) معرفی شد. این ویژگی بهینهسازیهایی در عملکرد و کارایی map ارائه میدهد. در زیر به بررسی این ویژگی…
Please open Telegram to view this post
VIEW IN TELEGRAM
اگر میخواید در مورد swiss map ها اطلاعات بیشتر داشته باشید این رفرنس ها به شما کمک می کندد
https://www.dolthub.com/blog/2023-03-28-swiss-map/
https://www.youtube.com/watch?v=JZE3_0qvrMg
https://abseil.io/about/design/swisstables
https://www.youtube.com/watch?v=ncHmEUmJZf4
http://graphics.stanford.edu/~seander/bithacks.html##ValueInWord
https://aras-p.info/blog/2016/08/09/More-Hash-Function-Tests/
https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
https://www.dolthub.com/blog/2023-03-28-swiss-map/
https://www.youtube.com/watch?v=JZE3_0qvrMg
https://abseil.io/about/design/swisstables
https://www.youtube.com/watch?v=ncHmEUmJZf4
http://graphics.stanford.edu/~seander/bithacks.html##ValueInWord
https://aras-p.info/blog/2016/08/09/More-Hash-Function-Tests/
https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
Forwarded from Software Labdon
با پیشرفت روزافزون کدنویسی با هوش مصنوعی، مهندسان نرمافزار باید تواناییهای زیر را داشته باشند:
۱- توانایی بررسی سریع و دقیق کد نوشته شده توسط هوش مصنوعی
۲- توانایی توصیف مشکلات بهصورت واضح و کامل
۳- توانایی انجام همزمان چند کار و تغییر سریع بین زمینههای مختلف
خوب است که از حالا این مهارتها را تمرین کنید!
<Mehdi Allahyari/>
۱- توانایی بررسی سریع و دقیق کد نوشته شده توسط هوش مصنوعی
۲- توانایی توصیف مشکلات بهصورت واضح و کامل
۳- توانایی انجام همزمان چند کار و تغییر سریع بین زمینههای مختلف
خوب است که از حالا این مهارتها را تمرین کنید!
<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?&utm_source=tldrcrypto
➖➖➖➖➖➖➖➖
👑 @Blockchain_labdon
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?&utm_source=tldrcrypto
➖➖➖➖➖➖➖➖
👑 @Blockchain_labdon
polygon.technology
Jio Platforms Ltd. is collaborating with Polygon Labs to Bring Web3 Capabilities to 450+ Million Jio Users
Jio Platforms Ltd. (JPL) a multinational technology company and a subsidiary of Reliance Industries Limited, has entered a strategic partnership with Polygon Labs, the developer arm of Polygon Protocols for its Web3 and blockchain debut in India.
در 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 برنامه میشود.
---
### ۳. مثال برای درک بهتر:
#### خروجی:
#### توضیح:
- panic در گوروتین فرزند رخ داده است.
- مکانیزم ریکاوری در گوروتین اصلی (
- برنامه crash میکند، زیرا panic در گوروتین فرزند recover نشده است.
---
### ۴. چگونه panic گوروتینهای فرزند را recover کنیم؟
برای اینکه panic گوروتینهای فرزند را بگیرید، باید در هر گوروتین فرزند یک مکانیزم ریکاوری قرار دهید. به این ترتیب، هر گوروتین به طور مستقل panic خود را مدیریت میکند.
#### مثال اصلاحشده:
#### خروجی:
#### توضیح:
- panic در گوروتین فرزند رخ داده است.
- مکانیزم ریکاوری در گوروتین فرزند panic را گرفته و برنامه crash نمیکند.
- گوروتین اصلی به کار خود ادامه میدهد.
---
### ۵. نکات مهم:
- هر گوروتین باید به طور مستقل panic خود را مدیریت کند.
- اگر panic در یک گوروتین فرزند recover نشود، کل برنامه crash میکند.
- برای جلوگیری از crash برنامه، حتماً در هر گوروتین فرزند یک مکانیزم ریکاوری قرار دهید.
---
### جمعبندی:
مکانیزم ریکاوری که در گوروتین اصلی قرار میدهید، فقط panicهای همان گوروتین را میگیرد و روی گوروتینهای فرزند تأثیری ندارد. برای مدیریت panic در گوروتینهای فرزند، باید در هر گوروتین فرزند یک مکانیزم ریکاوری جداگانه قرار دهید. این کار باعث میشود برنامه شما در برابر خطاها مقاومتر شود و crash نکند.
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
وقتی شما یک مکانیزم ریکاوری (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
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
با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙
https://t.me/boost/gopher_academy
در Go، دو ساختار select و switch برای کنترل جریان برنامه استفاده میشوند، اما کاربردهای متفاوتی دارند:
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0
➖➖➖➖➖➖➖➖
https://t.me/addlist/KpzXaiSpKENkMGM0