Gopher Academy
3.34K subscribers
921 photos
40 videos
280 files
2.04K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
در Go، تفاوت‌هایی ظریف ولی مهم بین این سه نوع اعلان وجود دارد:

1. var x *[]book
2. var a []*book
3. var b *[]*book

هر یک از این موارد نشان‌دهنده یک نوع متفاوت از داده است که در ادامه به جزئیات و کاربردهای هر کدام می‌پردازیم:

### 1. var x *[]book
این متغیر یک اشاره‌گر (pointer) به یک اسلایس (slice) از ساختار book است.

#### توضیحات:
x یک اشاره‌گر به یک اسلایس از نوع book است.
*[]book نشان‌دهنده یک اسلایس است که خود شامل عناصر book است.
- این نوع اعلان زمانی استفاده می‌شود که نیاز دارید به جای اسلایس، به یک اشاره‌گر به اسلایس دسترسی داشته باشید، مثلاً وقتی می‌خواهید اسلایس را در یک تابع اصلاح کنید و تغییرات در خارج از تابع نیز منعکس شود.


### 2. var a []*book
این متغیر یک اسلایس (slice) از اشاره‌گرها (pointers) به ساختار book است.

#### توضیحات:
a یک اسلایس است که هر عنصر آن یک اشاره‌گر به یک book است.
[]*book یک اسلایس است که در آن هر عنصر یک اشاره‌گر به نوع book است.
- این نوع اعلان زمانی استفاده می‌شود که می‌خواهید به ساختارهای book به صورت اشاره‌گر دسترسی داشته باشید، مثلاً وقتی می‌خواهید عناصر را مستقیماً اصلاح کنید بدون اینکه اسلایس یا مقدار جدیدی ساخته شود.


### 3. var b *[]*book
این متغیر یک اشاره‌گر (pointer) به یک اسلایس (slice) از اشاره‌گرها (pointers) به book است.

#### توضیحات:
b یک اشاره‌گر به اسلایسی است که هر عنصر آن یک اشاره‌گر به book است.
- ا*[]*book نشان‌دهنده یک اشاره‌گر به اسلایسی است که شامل اشاره‌گرهای به book می‌باشد.
- این نوع اعلان زمانی مفید است که بخواهید اسلایس و عناصر آن را مستقیماً از طریق یک اشاره‌گر تغییر دهید، مانند اصلاح اسلایس و عناصر آن در یک تابع.



### خلاصه
- var x *[]book: اشاره‌گر به یک اسلایس از book.
- var a []*book: اسلایسی از اشاره‌گرها به book.
- var b *[]*book: اشاره‌گر به یک اسلایس از اشاره‌گرها به book.

هر کدام از این ساختارها کاربرد خاص خود را دارد و انتخاب صحیح بستگی به نیاز شما برای دستکاری داده‌ها و استفاده از اشاره‌گرها دارد.


👑 @gopher_academy
5🔥5
🔵 عنوان مقاله
Minimock: A Tool to Generate Mocks from Interface Declarations

🟢 خلاصه مقاله:
مقاله‌ای که مورد بررسی قرار گرفت به معرفی و توضیح یک ابزار در زمینه برنامه‌نویسی می‌پردازد که برای ایجاد ماک‌های با نوع‌‌داده‌ای استاتیک (statiically typed mocks) و ابزارهای کمکی طراحی شده است. این ابزار به‌طور کامل با بسته تستینگ (testing package) یکپارچه شده و از جنریک‌ها (generics) پشتیبانی می‌کند. به‌طور کلی، ابزار معرفی شده در مقاله به توسعه‌دهندگان کمک می‌کند تا فرآیند آزمایش و تست کدهای خود را به‌صورت کارآمدتر و دقیق‌تری انجام دهند. نکته برجسته ابزار مورد نظر، ادغام کامل آن با امکانات برنامه‌نویسی مدرن و پشتیبانی قوی از ویژگی‌های جدید زبان برنامه‌نویسی مانند جنریک‌ها است، که امکان پیاده‌سازی تست‌های دقیق‌تر و مفیدتری را فراهم می‌آورد.

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


👑 @gopher_academy
🎉6
🔵Interface on the producer side (#6)

🟢Keeping interfaces on the client side avoids unnecessary abstractions.



👑 @gopher_academy
👍4
پکیج sync در زبان Go چندین ابزار هم‌زمانی را برای مدیریت ایمن داده‌ها بین گوروتین‌ها فراهم می‌کند. یکی از این ابزارها، RWMutex است که به شما امکان می‌دهد تا قفل‌های خواندن (RLock) و نوشتن (Lock) را بر روی منابع مشترک اعمال کنید.

### توضیح متدهای RWMutex

#### 1. func (rw *RWMutex) Lock()
این متد یک قفل نوشتن (Writing lock) را اعمال می‌کند. در این حالت، تنها یک گوروتین می‌تواند قفل را نگه دارد و دسترسی نوشتن داشته باشد. تمام عملیات خواندن و نوشتن دیگر منتظر می‌مانند تا این قفل آزاد شود.

- کاربرد: زمانی که باید داده‌ها را تغییر دهید و مطمئن شوید که هیچ گوروتین دیگری در حال خواندن یا نوشتن به آن داده‌ها نیست.

#### 2. func (rw *RWMutex) RLock()
این متد یک قفل خواندن (Reading lock) را اعمال می‌کند. قفل خواندن به چندین گوروتین اجازه می‌دهد تا همزمان داده‌ها را بخوانند، اما در صورت وجود قفل نوشتن، این قفل قابل اعمال نیست.

- کاربرد: زمانی که نیاز به خواندن داده‌ها دارید و مطمئن هستید که داده‌ها تغییر نمی‌کنند.

#### 3. func (rw *RWMutex) RLocker() Locker
این متد یک رابط (interface) از نوع Locker برمی‌گرداند که تنها قابلیت قفل خواندن (RLock) را فراهم می‌کند. این می‌تواند برای مواردی استفاده شود که نیاز به استفاده از این قفل‌ها در ساختارهای خاصی مثل sync یا کانال‌ها دارید.

- کاربرد: برای استفاده از قفل خواندن در جاهایی که یک رابط Locker مورد نیاز است.

#### 4. func (rw *RWMutex) RUnlock()
این متد قفل خواندن را آزاد می‌کند. اگر تعداد قفل‌های خواندن به صفر برسد، گوروتین‌هایی که منتظر قفل نوشتن هستند، می‌توانند ادامه دهند.

- کاربرد: باید بلافاصله پس از اتمام عملیات خواندن، این متد را فراخوانی کنید تا قفل آزاد شود.

#### 5. func (rw *RWMutex) TryLock() bool
این متد سعی می‌کند تا قفل نوشتن را بدون مسدود کردن اعمال کند. اگر قفل موفقیت‌آمیز بود، مقدار true برمی‌گرداند؛ در غیر این صورت، false برمی‌گرداند.

- کاربرد: زمانی که می‌خواهید بدون انتظار برای قفل، سعی کنید قفل نوشتن را اعمال کنید.

#### 6. func (rw *RWMutex) TryRLock() bool
این متد سعی می‌کند تا قفل خواندن را بدون مسدود کردن اعمال کند. اگر قفل موفقیت‌آمیز بود، مقدار true برمی‌گرداند؛ در غیر این صورت، false برمی‌گرداند.

- کاربرد: زمانی که می‌خواهید بدون انتظار برای قفل، سعی کنید قفل خواندن را اعمال کنید.

#### 7. func (rw *RWMutex) Unlock()
این متد قفل نوشتن را آزاد می‌کند. پس از آزاد شدن، گوروتین‌های منتظر می‌توانند قفل نوشتن یا خواندن را اعمال کنند.

- کاربرد: باید بلافاصله پس از اتمام عملیات نوشتن، این متد را فراخوانی کنید تا قفل آزاد شود.

#### 8. func (rw *RWMutex) rUnlockSlow(r int32)
این یک متد داخلی و غیرصادراتی است که برای مدیریت پیچیده‌تر قفل خواندن استفاده می‌شود. به طور معمول، شما نیازی به فراخوانی مستقیم این متد ندارید. این متد زمانی فراخوانی می‌شود که باید مدیریت پیشرفته‌تری برای آزادسازی قفل خواندن انجام شود، به ویژه در مواردی که قفل به سرعت آزاد نمی‌شود.

### نتیجه‌گیری
RWMutex ابزار بسیار قدرتمندی برای مدیریت هم‌زمانی در Go است که به شما امکان می‌دهد بین قفل‌های خواندن و نوشتن تفاوت قائل شوید. استفاده صحیح از این متدها می‌تواند به بهبود کارایی برنامه و جلوگیری از شرایط رقابتی کمک کند.


👑 @gopher_academy
👍5
🔵Returning interfaces (#7)

🟢To prevent being restricted in terms of flexibility, a function shouldn’t return interfaces but concrete implementations in most cases. Conversely, a function should accept interfaces whenever possible.



👑 @gopher_academy
2
Context
Anonymous Quiz
61%
immutable
39%
Mutable
👍6
🔵any says nothing (#8)

🟢Only use any if you need to accept or return any possible type, such as json.Marshal. Otherwise, any doesn’t provide meaningful information and can lead to compile-time issues by allowing a caller to call methods with any data type.



👑 @gopher_academy
1🕊1🍾1
🔵 عنوان مقاله
Codoworks Go Boilerplate: Prod-Ready RESTful API Boilerplate

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

🟣لینک مقاله:
https://github.com/codoworks/go-boilerplate


👑 @gopher_academy
👍21🍾1
🔵 عنوان مقاله
The One Billion Row Challenge (Again!) – From 95s to 1.96s

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

🟣لینک مقاله:
https://r2p.dev/b/2024-03-18-1brc-go/


👑 @gopher_academy
1👍1🔥1🕊1🍾1
💡5 پلتفرم برتر چالش کد نویسی برای برنامه نویسان

🏷 leetcode.com ⬇️

⬅️با مجموعه گسترده ای از چالش های کدنویسی در LeetCode، مهارت های حل مسئله را تقویت کنید.

🏷 hackerrank.com ⬇️

⬅️چالش های کدنویسی متنوعی را برای الگوریتم، ساختار داده و بهبود مهارت زبان ارائه می دهد.

🏷 codesignal.com ⬇️

⬅️چالش ها و ارزیابی های کدگذاری را برای افزایش مهارت های کدنویسی برای مصاحبه و تمرین فراهم می کند.

🏷 codewars.com ⬇️

⬅️ توسعه دهندگان را در حل خلاقانه مسائل از طریق چالش های کاتا درگیر می کند و توسعه مهارت ها را تقویت می کند.

🏷 exercism.io ⬇️

⬅️ تمرین‌های کدنویسی را به زبان‌های مختلف ارائه می‌کند که راهنمایی و پشتیبانی جامعه را ارائه می‌کند.

#kali_linuxxx


👑 @gopher_academy
👍3🔥1🎉1🍾1
🔵 عنوان مقاله
Measuring a System’s Performance with Go

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

🟣لینک مقاله:
https://lemire.me/blog/2024/03/17/measuring-your-systems-performance-using-software-go-edition/


👑 @gopher_academy
👍4🔥2🍾1
🔵 عنوان مقاله
Learn Building Scalable & Resilient Go Backend

🟢 خلاصه مقاله:
مقاله‌ای که مورد بحث قرار گرفته، به معرفی دوره آینده "Go Event-Driven" می‌پردازد، که مهارت‌های مرتبط با برنامه‌نویسی رویداد محور را آموزش می‌دهد. برنامه‌نویسی رویداد محور با زبان Go یکی از مهارت‌های درخواستی و مهم در بازار کار فناوری اطلاعات است و این دوره به شرکت‌کنندگان فرصتی می‌دهد تا از دیگر رقبا متمایز شوند. مشارکت در این دوره فرصتی است برای افراد جهت به دست آوردن دانش فنی به روز و کاربردی در زمینه‌ی برنامه‌نویسی رویداد محور، که می‌تواند به پیشرفت شغلی و فرصت‌های بهتری در آینده منجر شود.

🟣لینک مقاله:
https://threedots.tech/event-driven/?utm_source=golang-weekly


👑 @gopher_academy
👍2🔥21
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1255447]


در پیام خطای SIGSEGV که مشاهده می‌کنید، pc مخفف "Program Counter" است. Program Counter (یا به اختصار PC) یک ثبات (register) در پردازنده است که آدرس دستورالعملی را که قرار است بعدی اجرا شود، نگه می‌دارد.

توضیحاتی درباره‌ی پیام خطا:

🔵اsignal SIGSEGV: این سیگنال نشان می‌دهد که یک Segmentation Fault رخ داده است، یعنی برنامه سعی کرده به آدرسی از حافظه دسترسی پیدا کند که مجاز نیست.

🔵اcode=0x1: این مقدار نشان‌دهنده‌ی کد خطای خاصی است که در اینجا بیان می‌کند که خطا به دلیل دسترسی نامعتبر به حافظه رخ داده است.

🔵اaddr=0x0: این مقدار نشان می‌دهد که برنامه سعی کرده به آدرس حافظه 0x0 دسترسی پیدا کند. دسترسی به این آدرس معمولاً به دلیل استفاده از اشاره‌گر تهی (nil pointer) است.

🔵اpc=0x1255447: این مقدار نشان می‌دهد که برنامه در کدام آدرس حافظه (instruction address) در حال اجرا بود که خطا رخ داد. این آدرس نشان می‌دهد که کدام دستور در کد شما باعث بروز این خطا شده است.


👑 @gopher_academy
👍31🍾1
🔵 عنوان مقاله
How to Write a '4000 Stars' GitHub README for Your Project

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

🟣لینک مقاله:
https://www.daytona.io/dotfiles/how-to-write-4000-stars-github-readme-for-your-project


👑 @gopher_academy
👍3
🖐درود به همه دوستان

لیست چنل های ما👇

🔵 موقعیت شغلی های گولنگ
❤️ @gopher_job


🔵 آموزش و مقالات بروز انواع دیتابیس ها
❤️ @database_academy
👍5🍾1
Gopher Academy pinned «🖐درود به همه دوستان لیست چنل های ما👇 🔵 موقعیت شغلی های گولنگ ❤️ @gopher_job 🔵 آموزش و مقالات بروز انواع دیتابیس ها ❤️ @database_academy»
🔵 عنوان مقاله
More Powerful Go Execution Traces

🟢 خلاصه مقاله:
مقاله‌ای که مورد بررسی قرار گرفته به تلاش‌های تیم برنامه‌نویسی زبان برنامه‌نویسی Go در دو نسخه اخیر اشاره دارد، که در آن‌ها به بهبود و تعمیر سیستم اجرایی tracing پرداخته شده است. این بهبودها منجر به کاهش ده برابری در بار اضافی سیستم و افزایش قابلیت‌های مقیاس‌پذیری در trace‌ها شده‌است. از نتایج این پیشرفت‌ها، دو ویژگی آزمایشی جدید معرفی شده‌اند. نخست، توانایی ضبط مداوم اجرا که به‌عنوان 'flight recording' شناخته می‌شود و دوم، API مخصوص خواندن traceها. هر دو ویژگی جدید، افق‌های تازه‌ای را برای توسعه‌دهندگان و محققان در زمینه تحلیل کارایی و عیب‌یابی برنامه‌ها فراهم می‌آورند و قدم‌های مهمی در جهت افزایش کارایی و تحلیل‌پذیری برنامه‌ها در Go به‌شمار می‌روند.

🟣لینک مقاله:
https://go.dev/blog/execution-traces-2024


👑 @gopher_academy
👍4
در زبان Go، defer یک مکانیزم است که به شما اجازه می‌دهد یک تابع را در انتهای اسکوپ (scope) اجرا کنید، معمولاً برای پاکسازی منابع یا اجرای کدهای نهایی مثل بستن فایل‌ها، قفل‌ها، یا کانکشن‌ها.

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

🟢 1. Open-Coded Defer

اOpen-coded defer نوعی از defer است که بهینه‌سازی شده و مستقیماً در کد قرار داده می‌شود. این نوع defer زمانی اتفاق می‌افتد که Go تشخیص دهد که فراخوانی defer نیازی به پیچیدگی‌های اضافه‌ی معمول (مثل تخصیص حافظه روی heap) ندارد. معمولاً این بهینه‌سازی زمانی انجام می‌شود که تعداد کمی defer در تابع وجود دارد و آنها ساده هستند.

ویژگی‌ها:
- از تخصیص حافظه اضافی جلوگیری می‌کند.
- سریع‌تر اجرا می‌شود.
- مستقیم در کد قرار می‌گیرد و از پیچیدگی‌های معمول defer اجتناب می‌کند.

🟢 2. Heap-Allocated Defer

اHeap-allocated defer زمانی ایجاد می‌شود که defer به دلایل خاصی نیاز به تخصیص حافظه روی heap دارد. این اتفاق معمولاً در مواقعی رخ می‌دهد که تابع دارای چندین defer پیچیده باشد، یا زمانی که defer در یک تابع ناشناس یا گوروتین استفاده شود.

ویژگی‌ها:
- برای مدیریت defer باید از heap استفاده کند.
- کندتر از open-coded defer است زیرا نیاز به تخصیص حافظه و مدیریت اضافی دارد.
- در تابع‌هایی که تعداد زیادی defer دارند یا defer در گوروتین‌ها استفاده شده، این نوع دیده می‌شود.

🟢 3. Stack-Allocated Defer

اStack-allocated defer نوعی از defer است که در stack تخصیص داده می‌شود. این نوع معمولاً در مواقعی استفاده می‌شود که defer از لحاظ تخصیص منابع ساده است و نیازی به استفاده از heap ندارد، اما همچنان نمی‌تواند open-coded باشد. این نوع به نوعی میان open-coded و heap-allocated قرار می‌گیرد.

🔵ویژگی‌ها:
- روی stack تخصیص داده می‌شود.
- از heap استفاده نمی‌کند، بنابراین بهینه‌تر از heap-allocated defer است.
- به دلایلی نمی‌تواند open-coded باشد (مثل پیچیدگی بیشتر یا وجود چندین defer).

🔴 جمع‌بندی

- `Open-coded defer`: بهینه‌ترین نوع، زمانی که defer ساده و کم تعداد باشد.
- `Heap-allocated defer`: کمینه کارایی دارد زیرا نیاز به تخصیص حافظه روی heap دارد.
- `Stack-allocated defer`: از stack استفاده می‌کند و بین کارایی و پیچیدگی قرار می‌گیرد.

این تمایزها به دلیل نحوه مدیریت منابع و بهینه‌سازی‌های مختلف در کامپایلر Go است و درک آنها می‌تواند به نوشتن کدهای کاراتر کمک کند.


👑 @gopher_academy
👍6
🔵 عنوان مقاله
Valgo 0.3: An Expressive Validator Library

🟢 خلاصه مقاله:
مقاله‌ای که مورد بررسی قرار گرفته به معرفی کتابخانه‌ای جدید برای اعتبارسنجی داده‌ها به نام "Valgo" پرداخته است. تمرکز اصلی این کتابخانه بر تایپ‌سیف (امنیت نوع) و قابلیت توسعه با استفاده از جنریک‌ها است. این کتابخانه با سایر کتابخانه‌های اعتبارسنجی تفاوت‌های چشمگیری دارد، به ویژه در نحوه اعمال قوانین اعتبارسنجی. در "Valgo"، قوانین به جای استفاده از تگ‌های ساختار، به صورت توابع نوشته می‌شوند که این امر امکان سازگاری و انعطاف‌پذیری بیشتری در چگونگی و مکان اعتبارسنجی داده‌ها را فراهم می‌آورد. این تغییر نه تنها افزایش کنترل بر روی پروسه اعتبارسنجی را به دنبال دارد بلکه امکان سفارشی‌سازی بیشتری را برای توسعه‌دهندگان ایجاد می‌کند تا بتوانند با توجه به نیازهای خاص پروژه خود، بهترین استفاده را از این کتابخانه ببرند.

🟣لینک مقاله:
https://github.com/cohesivestack/valgo


👑 @gopher_academy
👍5
درود دوستان اپدیت جدید تلگرام(البته خیلی وقت پیش) که ری اکشن جدیدی به نام استارز فعال شده که با زدن اون میتونید به چنل هایی که دوست دارید استارز هدیه بدین و ازشون حمایت کنید.

استارز هایی که شما اهدا میکنید به موجودی چنل ها اضافه میشه و قابلیت برداشتش برای ادمین ها فراهم میشه

این استارز رو ما اضافه کردیم توی reaction های چنل


👑 @gopher_job
3🔥1🎉1🕊1🍾1
🔵 عنوان مقاله
Debugging a Go Bug with Non-Blocking Reads

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

🟣لینک مقاله:
https://scratchdata.com/blog/go-nonblocking-pipes-bug/


👑 @gopher_academy
👍3🍾1