🎃1
در Go، رشتهها (strings) به صورت immutable طراحی شدهاند. این به این معناست که پس از ایجاد یک رشته، محتوای آن نمیتواند تغییر کند. دلایل متعددی برای این طراحی وجود دارد:
1. کاهش پیچیدگی و افزایش کارایی:
- وقتی یک رشته immutable باشد، عملیات همزمانی (concurrency) به طور قابل توجهی سادهتر میشود زیرا نیازی نیست نگران تغییرات غیرمنتظره در رشته باشید.
- کپیبرداری از رشتهها در این حالت بسیار سادهتر و سریعتر است، زیرا تنها نیاز به کپی کردن یک اشارهگر و طول رشته دارید، نه محتوای آن.
2. امنیت و پیشبینیپذیری:
- تغییرناپذیری رشتهها به معنای آن است که میتوانید به راحتی رشتهها را به عنوان کلید در ساختارهای دادهای مانند نقشهها (maps) استفاده کنید، بدون اینکه نگران تغییرات آنها باشید.
- همچنین، این ویژگی باعث میشود که کد پیشبینیپذیرتر و کمخطاتر باشد.
3. سازگاری با UTF-8:
- رشتهها در Go به صورت مجموعهای از بایتها ذخیره میشوند که از UTF-8 پشتیبانی میکنند. این طراحی باعث میشود که رشتهها به راحتی قابل انتقال و تبادل بین سیستمهای مختلف باشند.
### مثال:
در مثال زیر، اگرچه به نظر میرسد محتوای رشته تغییر میکند، اما در واقع یک رشته جدید ایجاد میشود و متغیر
در اینجا،
### نتیجهگیری
طراحی immutable برای رشتهها در Go مزایای متعددی دارد از جمله افزایش کارایی، امنیت و سادگی در همزمانی. این طراحی همچنین باعث میشود که کار با رشتهها در برنامههای بزرگ و پیچیده سادهتر و کمخطاتر باشد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
1. کاهش پیچیدگی و افزایش کارایی:
- وقتی یک رشته immutable باشد، عملیات همزمانی (concurrency) به طور قابل توجهی سادهتر میشود زیرا نیازی نیست نگران تغییرات غیرمنتظره در رشته باشید.
- کپیبرداری از رشتهها در این حالت بسیار سادهتر و سریعتر است، زیرا تنها نیاز به کپی کردن یک اشارهگر و طول رشته دارید، نه محتوای آن.
2. امنیت و پیشبینیپذیری:
- تغییرناپذیری رشتهها به معنای آن است که میتوانید به راحتی رشتهها را به عنوان کلید در ساختارهای دادهای مانند نقشهها (maps) استفاده کنید، بدون اینکه نگران تغییرات آنها باشید.
- همچنین، این ویژگی باعث میشود که کد پیشبینیپذیرتر و کمخطاتر باشد.
3. سازگاری با UTF-8:
- رشتهها در Go به صورت مجموعهای از بایتها ذخیره میشوند که از UTF-8 پشتیبانی میکنند. این طراحی باعث میشود که رشتهها به راحتی قابل انتقال و تبادل بین سیستمهای مختلف باشند.
### مثال:
در مثال زیر، اگرچه به نظر میرسد محتوای رشته تغییر میکند، اما در واقع یک رشته جدید ایجاد میشود و متغیر
s
به رشته جدید اشاره میکند:package main
import (
"fmt"
)
func main() {
s := "Hello"
s = s + " World"
fmt.Println(s) // Output: Hello World
}
در اینجا،
s = s + " World"
باعث ایجاد یک رشته جدید در حافظه میشود که شامل محتوای s
و " World" است. سپس متغیر s
به این رشته جدید اشاره میکند.### نتیجهگیری
طراحی immutable برای رشتهها در Go مزایای متعددی دارد از جمله افزایش کارایی، امنیت و سادگی در همزمانی. این طراحی همچنین باعث میشود که کار با رشتهها در برنامههای بزرگ و پیچیده سادهتر و کمخطاتر باشد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍15🔥1💯1
رالف جانسون (Ralph Johnson)
رالف ای. جانسون، دانشیار پژوهشی در گروه علوم کامپیوتر در دانشگاه ایلینوی در اوربانا-شامپین است. او درباره نرمافزار میگوید:
➖➖➖➖➖➖➖➖
👑 @gopher_academy
رالف ای. جانسون، دانشیار پژوهشی در گروه علوم کامپیوتر در دانشگاه ایلینوی در اوربانا-شامپین است. او درباره نرمافزار میگوید:
قبل از اینکه نرمافزار قابل استفاده مجدد باشد، ابتدا باید قابل استفاده باشد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍3💋3🔥1🕊1🍾1
🖐درود به همه دوستان گوفری
😍ما یه چنل زدیم مربوط به موقعیت های شغلی گولنگ (خارجی و داخلی) رو داخلش قرار میدیم
🔷️ از این به بعد موقعیت های شغلی گولنگ و رزومه های کارجویان رو داخل چنل زیر قرار میدیم
😉 و حتی دوستانی که دنبال موقعیت شغلی گولنگ هستن می تونن رزومه خودشون رو بدن به ما و براشون توی چنل بزاریم(فقط رزومه های گولنگی مورد قبول هست)
👇👇👇جوین بدید به چنل جدید 👇👇👇
@gopher_job
😍ما یه چنل زدیم مربوط به موقعیت های شغلی گولنگ (خارجی و داخلی) رو داخلش قرار میدیم
🔷️ از این به بعد موقعیت های شغلی گولنگ و رزومه های کارجویان رو داخل چنل زیر قرار میدیم
😉 و حتی دوستانی که دنبال موقعیت شغلی گولنگ هستن می تونن رزومه خودشون رو بدن به ما و براشون توی چنل بزاریم(فقط رزومه های گولنگی مورد قبول هست)
👇👇👇جوین بدید به چنل جدید 👇👇👇
@gopher_job
👍9🍾2❤1🔥1🕊1
یک سایت جامع برای یادگیری و آشنایی با ابزارها و پروژههای اکوسیستم کلود نیتیو که میتونه توی مصاحبهها و پیشرفت شغلیتون بهتون کمک کنه.
#cloudnative #system #design #devops #kubernetes
https://landscape.cncf.io/
➖➖➖➖➖➖➖➖
👑 @gopher_academy
#cloudnative #system #design #devops #kubernetes
https://landscape.cncf.io/
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍11
Gopher Academy pinned «🖐درود به همه دوستان گوفری 😍ما یه چنل زدیم مربوط به موقعیت های شغلی گولنگ (خارجی و داخلی) رو داخلش قرار میدیم 🔷️ از این به بعد موقعیت های شغلی گولنگ و رزومه های کارجویان رو داخل چنل زیر قرار میدیم 😉 و حتی دوستانی که دنبال موقعیت شغلی گولنگ هستن می تونن…»
یکی از مهم ترین قابلیت های گولنگ concurrency هست که قدرتش رو از go scheduler داره
این ویدیو سعی کرده بصورت مصور و عمیق scheduler رو بررسی کنه که کلی نکته داره و میتونه دید خوبی به شما بده در مورد نحوه کارش
Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency
https://youtu.be/-K11rY57K7k?si=1Qdlhna11caQIXFK
#DevTwitter | <Hossein Nazari/>
➖➖➖➖➖➖➖➖
👑 @gopher_academy
این ویدیو سعی کرده بصورت مصور و عمیق scheduler رو بررسی کنه که کلی نکته داره و میتونه دید خوبی به شما بده در مورد نحوه کارش
Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency
https://youtu.be/-K11rY57K7k?si=1Qdlhna11caQIXFK
#DevTwitter | <Hossein Nazari/>
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🔥8❤2👍1🕊1
اگر دوست دارید بدونید که در لایه های مختلف برنامه ای که توسعه دادید چه ابزار هایی هست که بتونید ازشون استفاده کنید (از دیتابیس گرفته تا CI/CD) این سایت احتمالا کمکتون کنه.
به اضافه اطلاعات خیلی خوبی راجع به هر ابزار داده:
landscape.cncf.io
#DevTwitter | <Reza/>
➖➖➖➖➖➖➖➖
👑 @gopher_academy
به اضافه اطلاعات خیلی خوبی راجع به هر ابزار داده:
landscape.cncf.io
#DevTwitter | <Reza/>
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍8🔥2
یک نقشه تعاملی عااالی از کرنل لینوکس Linux kernel
خدایش زحمت کشیده
یک مرجع عالی ،
makelinux.github.io/kernel/map/
#DevTwitter | <MehrdadLinux/>
➖➖➖➖➖➖➖➖
👑 @gopher_academy
خدایش زحمت کشیده
یک مرجع عالی ،
makelinux.github.io/kernel/map/
#DevTwitter | <MehrdadLinux/>
➖➖➖➖➖➖➖➖
👑 @gopher_academy
❤7
🎯کتاب
Seven Concurrency Models in Seven Weeks
🌷 این کتاب به بررسی مدل های مختلف برای مدیریت همزمانی در نرمافزار میپردازد. این مدلها شامل "Thread and Locks"، "برنامهنویسی تابعی"، "مدل Actor"، "فرآیندهای ترتیبی ارتباطی"، "پردازش جریان"، "پیمانهبندی دادهها"، و "معماری Lambda" هستند. هر فصل به طور عملی و با مثالهایی از دنیای واقعی، مزایا و چالشهای هر مدل را توضیح میدهد. کتاب هدف دارد تا توسعهدهندگان را برای بهرهبرداری از چند هستهایها، مدیریت هزاران کاربر و دادههای بزرگ، و اطمینان از کارکرد پایدار نرمافزار در مقابل خطاهای سختافزاری و نرمافزاری آماده کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Seven Concurrency Models in Seven Weeks
🌷 این کتاب به بررسی مدل های مختلف برای مدیریت همزمانی در نرمافزار میپردازد. این مدلها شامل "Thread and Locks"، "برنامهنویسی تابعی"، "مدل Actor"، "فرآیندهای ترتیبی ارتباطی"، "پردازش جریان"، "پیمانهبندی دادهها"، و "معماری Lambda" هستند. هر فصل به طور عملی و با مثالهایی از دنیای واقعی، مزایا و چالشهای هر مدل را توضیح میدهد. کتاب هدف دارد تا توسعهدهندگان را برای بهرهبرداری از چند هستهایها، مدیریت هزاران کاربر و دادههای بزرگ، و اطمینان از کارکرد پایدار نرمافزار در مقابل خطاهای سختافزاری و نرمافزاری آماده کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍10❤2🔥1💯1🍾1
✍️ Rouzbeh SabzeheiRouzbeh Sabzehei
تو سیستم هایی که باید از قدرت پردازش های Concurrent بهره گرفته بشه یا به اصطلاح Multi-thread نوشته بشه. یکی از دغدغه ها همیشه بحث دسترسی به دیتای Share بین Thread های مختلف هست. اگر این دسترسی (از نوع Read و یا Write ) با استفاده از تکنیک های خاصی انجام نشه میتونه مشکلاتی مثل Data Race و یا Undefined Behavior رو بوجود بیاره.
یکی از راه حل ها استفاده از روش Lock هست که معمولا از Mutex یا RwLock و یا روش های مرسوم دیگه استفاده میشه. جدا از افت پرفورمنسی که این روش داره اگر به درستی استفاده نشه ممکنه منجر به Deadlock و یا مشکلات دیگر Sync نگه داشتن دیتا بشه. اینجور باگ ها بسیار خطرناک هستند و به دلیل پیچیدگی لایه های مختلف از اپلیکیشن گرفته تا سیستم عامل و CPU در زمان و نحوه اجرای این Lock ها ممکنه احتمال رخ دادنش کم باشه و خیلی دیر شناسایی بشه.
توی مطالعه هایی که انجام شده استفاده از روش های Lock-Free (استفاده از Atomic ها) میتونه این مشکلات رو حل کنه و تو مواردی تونسته پرفورمنس رو نسبت به حالت مشابه استفاده از Mutex به نزدیک 63% افزایش بده. یکی از کلیدی ترین الگوریتم ها توی این مطالعات CAS یا Compare and Swap بوده.
البته استفاده از Atomic ها تو بعضی سناریو ها میتونه پیچیدگی کد رو چند برابر کنه و ممکنه رو بعضی معماری های پردازنده های مختلف جواب نده.
کد زیر یک نمونه ساده از مقایسه Mutex و Atomic ها برای یک سناروی مشابه افزایش یک شمارنده عددی هست که با Rust نوشته شده.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
تو سیستم هایی که باید از قدرت پردازش های Concurrent بهره گرفته بشه یا به اصطلاح Multi-thread نوشته بشه. یکی از دغدغه ها همیشه بحث دسترسی به دیتای Share بین Thread های مختلف هست. اگر این دسترسی (از نوع Read و یا Write ) با استفاده از تکنیک های خاصی انجام نشه میتونه مشکلاتی مثل Data Race و یا Undefined Behavior رو بوجود بیاره.
یکی از راه حل ها استفاده از روش Lock هست که معمولا از Mutex یا RwLock و یا روش های مرسوم دیگه استفاده میشه. جدا از افت پرفورمنسی که این روش داره اگر به درستی استفاده نشه ممکنه منجر به Deadlock و یا مشکلات دیگر Sync نگه داشتن دیتا بشه. اینجور باگ ها بسیار خطرناک هستند و به دلیل پیچیدگی لایه های مختلف از اپلیکیشن گرفته تا سیستم عامل و CPU در زمان و نحوه اجرای این Lock ها ممکنه احتمال رخ دادنش کم باشه و خیلی دیر شناسایی بشه.
توی مطالعه هایی که انجام شده استفاده از روش های Lock-Free (استفاده از Atomic ها) میتونه این مشکلات رو حل کنه و تو مواردی تونسته پرفورمنس رو نسبت به حالت مشابه استفاده از Mutex به نزدیک 63% افزایش بده. یکی از کلیدی ترین الگوریتم ها توی این مطالعات CAS یا Compare and Swap بوده.
البته استفاده از Atomic ها تو بعضی سناریو ها میتونه پیچیدگی کد رو چند برابر کنه و ممکنه رو بعضی معماری های پردازنده های مختلف جواب نده.
کد زیر یک نمونه ساده از مقایسه Mutex و Atomic ها برای یک سناروی مشابه افزایش یک شمارنده عددی هست که با Rust نوشته شده.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍8🔥1💅1
✍️ Rouzbeh SabzeheiRouzbeh Sabzehei
ا استفاده از تکنیک Const Expression میتونید موقع کامپایل محاسبات و پردازش هاتون رو انجام بدید. این روش اجازه میده محاسبات مختلفتون موقع ران تایم نباشه و اینجوری سرعت نرم افزار رو تو محاسبات مشخص بالا ببرید. تو ++C میتونید با constexpr و در Rust با const از این ویژگی استفاده کنید.
تو مقاله اخیری که میخوندم برای یک الگوریتم ساده که حلقه ای بود برای محاسبه فاکتوریل یک سری اعداد استفاده از این روش تونسته بود سرعت رو از 2.69 نانوثانیه به 0.245 نانوثانیه در هر پیمایش حلقه کاهش بده یعنی نزدیک 91% بهبود سرعت !
➖➖➖➖➖➖➖➖
👑 @gopher_academy
ا استفاده از تکنیک Const Expression میتونید موقع کامپایل محاسبات و پردازش هاتون رو انجام بدید. این روش اجازه میده محاسبات مختلفتون موقع ران تایم نباشه و اینجوری سرعت نرم افزار رو تو محاسبات مشخص بالا ببرید. تو ++C میتونید با constexpr و در Rust با const از این ویژگی استفاده کنید.
تو مقاله اخیری که میخوندم برای یک الگوریتم ساده که حلقه ای بود برای محاسبه فاکتوریل یک سری اعداد استفاده از این روش تونسته بود سرعت رو از 2.69 نانوثانیه به 0.245 نانوثانیه در هر پیمایش حلقه کاهش بده یعنی نزدیک 91% بهبود سرعت !
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍3🎃2💅2🔥1🍓1
✍️ Rouzbeh SabzeheiRouzbeh Sabzehei
یکی از مواردی که تاثیر زیادی تو Performance نرم افزار داره استفاده از تکنیک Cache Warming هست. به این صورت که دیتای موردنیاز برای پردازش آماده میشه و از قبل در لایه های Cache پردازنده ( L1, L2 و L3 ) Load میشه. در ادامه CPU برای دسترسی به دیتا یا Instruction های موردنیاز لازم نیست از RAM دیتا رو بگیره و میتونه از دیتایی که Cache کرده استفاده کنه.
به طور تقریبی خوندن دیتا از L1 نزدیک ۲۰۰ برابر و L2 نزدیک ۲۰ برابر سریعتر از RAM هست. استفاده از الگو هایی مثل Pre Fetching و Data Oriented Design میتونه باعث Cache Warming بشه
➖➖➖➖➖➖➖➖
👑 @gopher_academy
یکی از مواردی که تاثیر زیادی تو Performance نرم افزار داره استفاده از تکنیک Cache Warming هست. به این صورت که دیتای موردنیاز برای پردازش آماده میشه و از قبل در لایه های Cache پردازنده ( L1, L2 و L3 ) Load میشه. در ادامه CPU برای دسترسی به دیتا یا Instruction های موردنیاز لازم نیست از RAM دیتا رو بگیره و میتونه از دیتایی که Cache کرده استفاده کنه.
به طور تقریبی خوندن دیتا از L1 نزدیک ۲۰۰ برابر و L2 نزدیک ۲۰ برابر سریعتر از RAM هست. استفاده از الگو هایی مثل Pre Fetching و Data Oriented Design میتونه باعث Cache Warming بشه
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🔥7👍2❤1
🔹این مقاله به بررسی ویژگیهای جدید و بهبودهای اعمال شده در نسخه 1.23 زبان برنامهنویسی Go میپردازد.
نکات اصلی:
🔻معرفی Iterators: بستههای iter، slices و maps برای کار با توالیهای داده به صورت استاندارد ارائه شدهاند.
🔻بهبود تایمرها: مشکلات مربوط به توقف و بازنشانی تایمرها بهبود یافته است.
🔻تInterning مقادیر: بهینهسازی حافظه با ذخیره تنها یک نمونه از مقادیر تغییرناپذیر انجام شده است.
🔻مدیریت کوکیها و فایل سیستم: قابلیتهای جدیدی برای مدیریت کوکیها و کپیکردن فایلها معرفی شده است.
🔻ابزارها و runtime: ابزارهای جدیدی برای جمعآوری دادههای تلمتری و بهبود عملکرد trace و vet اضافه شده است.
نتایج مهم:
🔻افزایش کارایی و سادهسازی مدیریت دادهها.
🔻بهبود عملکرد تایمرها و استفاده بهینهتر از حافظه.
🔻ارتقاء قابلیتهای ابزارها و runtime برای تسهیل کار برنامهنویسان.
🟢Go 1.23: Interactive release notes
🔵https://antonz.org/go-1-23/
➖➖➖➖➖➖➖➖
👑 @gopher_academy
نکات اصلی:
🔻معرفی Iterators: بستههای iter، slices و maps برای کار با توالیهای داده به صورت استاندارد ارائه شدهاند.
🔻بهبود تایمرها: مشکلات مربوط به توقف و بازنشانی تایمرها بهبود یافته است.
🔻تInterning مقادیر: بهینهسازی حافظه با ذخیره تنها یک نمونه از مقادیر تغییرناپذیر انجام شده است.
🔻مدیریت کوکیها و فایل سیستم: قابلیتهای جدیدی برای مدیریت کوکیها و کپیکردن فایلها معرفی شده است.
🔻ابزارها و runtime: ابزارهای جدیدی برای جمعآوری دادههای تلمتری و بهبود عملکرد trace و vet اضافه شده است.
نتایج مهم:
🔻افزایش کارایی و سادهسازی مدیریت دادهها.
🔻بهبود عملکرد تایمرها و استفاده بهینهتر از حافظه.
🔻ارتقاء قابلیتهای ابزارها و runtime برای تسهیل کار برنامهنویسان.
🟢Go 1.23: Interactive release notes
🔵https://antonz.org/go-1-23/
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍5🕊2❤1
چقدر از مطالبی که گذاشته میشه راضی هستید؟
درکل از روند فعالیت کانال راضی هستید؟
اگر نظر پیشنهادی انتقادی داشتید توی بیو کانال ای دی من هست
درکل از روند فعالیت کانال راضی هستید؟
اگر نظر پیشنهادی انتقادی داشتید توی بیو کانال ای دی من هست
Final Results
64%
عالیه
34%
متوسط
5%
ضعیف
❤11💯1
Gopher Academy pinned «چقدر از مطالبی که گذاشته میشه راضی هستید؟
درکل از روند فعالیت کانال راضی هستید؟
اگر نظر پیشنهادی انتقادی داشتید توی بیو کانال ای دی من هست»
درکل از روند فعالیت کانال راضی هستید؟
اگر نظر پیشنهادی انتقادی داشتید توی بیو کانال ای دی من هست»
مقاله "First Impressions of Go 1.23's range-over-func Feature" به بررسی ویژگی جدید "range-over-func" در Go 1.23 میپردازد. نویسنده ابتدا با تردید به این ویژگی نگاه میکند، اما پس از بررسی عملی و پیادهسازی آن در کتابخانه Kivik، به نتایج مثبتی میرسد. ویژگی range-over-func امکان ایجاد iteratorهایی با استفاده از توابع را فراهم میکند که باعث سادهتر شدن کد و افزایش خوانایی آن میشود. نتیجهگیری نویسنده این است که این ویژگی یادگیری پیچیدهای ندارد و میتواند به بهبود کدهای موجود کمک کند.
🟢Go 1.23: Interactive release notes
🔵https://boldlygo.tech/posts/2024-07-18-range-over-func/
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🟢Go 1.23: Interactive release notes
🔵https://boldlygo.tech/posts/2024-07-18-range-over-func/
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍6❤1🔥1
🎂🎊امروز زادروز چنل گوفر آکادمی هست🎊🎂
🥂امروز ۸ مرداد دقیقا روزی بود که گوفر آکادمی متولد شد🎂
🍾توی این مسیر کلی چیز یادگرفتم و حتی کلی رفیق خوب پیدا کردم
👑روز های خوب و بد زیادی داشتم تا جای که بود تونستم مقالات مفید و بروز براتون بذارم
🌷کانال ما چهارشنبه ۸ مرداد سال ۹۹ شروع به فعالیت خودش کرد یعنی ۴ سال میگذره از عمر این چنل (خیلی کوچیک بودیم اما زود بزرگ شدیم با تجربه تر شدیم در کنار شما)
🖐 دوستان این چنل ما رو حمایت کنید که همچنان با قدرت کارش رو ادامه بده👑🫡🍾🌷💸🚬
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢اگر تلگرام پرمیموم داری boost کن 👇
🔵 https://t.me/gopher_academy?boost
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢لینک حمایت مالی👇
🔵 https://www.coffeete.ir/gopher_academy
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢 اگرم سوالی نظری انتقادی بود درخدمتم👇
🔵 @mrbardia72
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢اگر دنبال تبلیغ هستی اینجا پیام بده👇
🔵 @labdon_ads
🥂امروز ۸ مرداد دقیقا روزی بود که گوفر آکادمی متولد شد🎂
🍾توی این مسیر کلی چیز یادگرفتم و حتی کلی رفیق خوب پیدا کردم
👑روز های خوب و بد زیادی داشتم تا جای که بود تونستم مقالات مفید و بروز براتون بذارم
🌷کانال ما چهارشنبه ۸ مرداد سال ۹۹ شروع به فعالیت خودش کرد یعنی ۴ سال میگذره از عمر این چنل (خیلی کوچیک بودیم اما زود بزرگ شدیم با تجربه تر شدیم در کنار شما)
🖐 دوستان این چنل ما رو حمایت کنید که همچنان با قدرت کارش رو ادامه بده👑🫡🍾🌷💸🚬
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢اگر تلگرام پرمیموم داری boost کن 👇
🔵 https://t.me/gopher_academy?boost
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢لینک حمایت مالی👇
🔵 https://www.coffeete.ir/gopher_academy
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢 اگرم سوالی نظری انتقادی بود درخدمتم👇
🔵 @mrbardia72
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🟢اگر دنبال تبلیغ هستی اینجا پیام بده👇
🔵 @labdon_ads
🍾14👍3❤2🏆1🎃1
در Go، بین دو نوع دادهی اشارهگر به یک برش از ساختارها (مثل var x *[]Book)
و برش از اشارهگرها به ساختارها (مثل var y []*Book) تفاوتهای مهمی وجود دارد
که میتواند بر کارایی و نحوه استفاده از آنها تأثیر بگذارد.
تفاوتها و مزایا/معایب
🔵var x *[]Book:
نوع داده: اشارهگر به یک برش از Book.
کاربرد: بیشتر زمانی مفید است که بخواهید برش اصلی را تغییر دهید (مثلاً اندازه آن را افزایش دهید).
مزایا: تغییر اندازه برش (مثل append) مستقیماً بر برش اصلی تأثیر میگذارد.
معایب: استفاده پیچیدهتر از نظر دسترسی به دادهها و مدیریت حافظه. استفاده از اشارهگر به یک برش معمولاً نیازمند تخصیص و مدیریت دستی حافظه است.
🔵var y []*Book:
نوع داده: برشی از اشارهگرها به Book.
کاربرد: معمولاً زمانی استفاده میشود که بخواهید بر روی مجموعهای از ساختارها کار کنید و هر کدام از آنها ممکن است به طور مستقل تغییر کند.
مزایا: سادهتر برای استفاده و مدیریت. دسترسی مستقیم به هر عنصر بدون نیاز به دنبالهروی اشارهگرها.
معایب: ممکن است نیاز به تخصیص حافظه برای هر عنصر داشته باشد.
بهینهتر بودن
در اغلب موارد، استفاده از var y []*Book بهینهتر و سادهتر است. زیرا:
خوانایی و سادگی: کد سادهتر و خواناتر است. دسترسی به عناصر برش بدون نیاز به دنبالهروی اشارهگرها انجام میشود.
مدیریت حافظه: برشها در Go به صورت خودکار مدیریت میشوند و نیازی به مدیریت دستی حافظه نیست.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
و برش از اشارهگرها به ساختارها (مثل var y []*Book) تفاوتهای مهمی وجود دارد
که میتواند بر کارایی و نحوه استفاده از آنها تأثیر بگذارد.
تفاوتها و مزایا/معایب
🔵var x *[]Book:
نوع داده: اشارهگر به یک برش از Book.
کاربرد: بیشتر زمانی مفید است که بخواهید برش اصلی را تغییر دهید (مثلاً اندازه آن را افزایش دهید).
مزایا: تغییر اندازه برش (مثل append) مستقیماً بر برش اصلی تأثیر میگذارد.
معایب: استفاده پیچیدهتر از نظر دسترسی به دادهها و مدیریت حافظه. استفاده از اشارهگر به یک برش معمولاً نیازمند تخصیص و مدیریت دستی حافظه است.
🔵var y []*Book:
نوع داده: برشی از اشارهگرها به Book.
کاربرد: معمولاً زمانی استفاده میشود که بخواهید بر روی مجموعهای از ساختارها کار کنید و هر کدام از آنها ممکن است به طور مستقل تغییر کند.
مزایا: سادهتر برای استفاده و مدیریت. دسترسی مستقیم به هر عنصر بدون نیاز به دنبالهروی اشارهگرها.
معایب: ممکن است نیاز به تخصیص حافظه برای هر عنصر داشته باشد.
بهینهتر بودن
در اغلب موارد، استفاده از var y []*Book بهینهتر و سادهتر است. زیرا:
خوانایی و سادگی: کد سادهتر و خواناتر است. دسترسی به عناصر برش بدون نیاز به دنبالهروی اشارهگرها انجام میشود.
مدیریت حافظه: برشها در Go به صورت خودکار مدیریت میشوند و نیازی به مدیریت دستی حافظه نیست.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍10❤1
مفهوم "propagate" یا "پراپاگیت کردن" در علوم کامپیوتر و برنامهنویسی به معنای انتقال یا گسترش اطلاعات، سیگنالها، تغییرات، یا خطاها از یک بخش به بخش دیگر سیستم است. به عنوان مثال، در شبکههای عصبی مصنوعی، پراپاگیت کردن شامل انتقال سیگنالهای ورودی از طریق لایههای مختلف شبکه به خروجیها است. در مدیریت خطا، پراپاگیت کردن خطا به معنای انتقال یک خطا از یک بخش کد به بخش دیگر است که ممکن است باعث ایجاد خطاهای مرتبط در آن بخشها شود. این مفهوم در بسیاری از زمینههای علمی و مهندسی به کار میرود.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍9❤1🍾1