Gopher Academy
3.34K subscribers
920 photos
40 videos
280 files
2.02K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔴 عنوان مقاله
Go! Unlock Your Tech Potential with Ardan Labs Consulting
✍️ خلاصه مقاله:
مقاله‌ای که شما ارجاع داده‌اید درباره‌ی شرکت Ardan Labs است که در زمینه تخصصی‌سازی در استفاده از زبان‌های برنامه‌نویسی Go و Rust، همچنین فناوری‌های Docker و Kubernetes (K8s) فعالیت می‌کند. این شرکت خدماتی را به منظور تسریع فرایند توسعه نرم‌افزار، بهینه‌سازی معماری سیستم‌ها و مدیریت بدهی فناوری ارائه می‌دهد. Ardan Labs با هدف بهبود عملکرد و افزایش سرعت توسعه در تیم‌های فناوری اطلاعات، راهکارهایی را پیشنهاد می‌دهد که می‌تواند به شرکت‌ها کمک کند تا با چالش‌های مربوط به کمبود مهارت‌های فنی و پیچیدگی‌های فناوری مقابله کنند. این شرکت با پیشنهاد راه‌حل‌های مؤثر، به شرکت‌ها امکان می‌دهد تا بر کمبودهای حوزه‌ی فناوری خود غلبه کنند و به رشد و توسعه پایدار دست یابند.

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


👑 @gopher_academy
👍5
🔴 عنوان مقاله
Broken Pipe in Golang

✍️ خلاصه مقاله: مقاله "Broken Pipe in Golang" به بررسی خطای "Broken Pipe" در زبان برنامه‌نویسی Go می‌پردازد. این خطا زمانی رخ می‌دهد که فرآیند ارسال داده‌ها به یک اتصال شبکه‌ای بسته شده یا در حال بسته شدن است. در این شرایط، نوشتن به این اتصال منجر به خطای "Broken Pipe" می‌شود که می‌تواند باعث کرش برنامه یا بروز مشکلاتی در عملکرد آن شود.

مقاله توضیح می‌دهد که این خطا معمولاً به‌دلیل عدم هماهنگی در مدیریت اتصال‌ها و وضعیت‌های غیرمنتظره شبکه‌ای به وجود می‌آید. همچنین، راهکارهایی برای پیشگیری و مدیریت این خطا ارائه می‌دهد، از جمله استفاده از تکنیک‌های مدیریت اتصال، پیاده‌سازی روش‌های بهتر برای بررسی وضعیت اتصالات قبل از نوشتن داده‌ها، و برخورد مناسب با خطاهای شبکه‌ای. هدف نهایی این است که برنامه‌ها به‌طور مؤثرتر و با خطاهای کمتری در مواجهه با مشکلات شبکه اجرا شوند.

🟣لینک مقاله:
https://gosamples.dev/broken-pipe/



👑 @gopher_academy
🕊2👍1🔥1
🔴 عنوان مقاله
Handle 'connection reset by peer' error in Go

✍️ خلاصه مقاله:

مقاله "Connection Reset by Peer in Golang" به بررسی خطای "Connection Reset by Peer" در برنامه‌های نوشته شده به زبان Go می‌پردازد. این خطا زمانی اتفاق می‌افتد که یک اتصال شبکه‌ای به‌طور غیرمنتظره توسط طرف مقابل قطع می‌شود، به‌ویژه هنگامی که داده‌هایی در حال ارسال هستند. این مشکل معمولاً ناشی از مشکلاتی مانند خاموش شدن سرور، قطع اتصال شبکه یا بروز خطا در سمت سرور است.

مقاله توضیح می‌دهد که این خطا می‌تواند منجر به بروز مشکلاتی در عملکرد برنامه و ناپایداری اتصال‌ها شود. برای مدیریت این خطا، پیشنهاداتی ارائه می‌دهد از جمله:

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

🟣لینک مقاله:


https://gosamples.dev/connection-reset-by-peer

👑 @gopher_academy
👍6
خلاصه‌ای از اشتباهات رایج در زبان برنامه‌نویسی Go که از کتابی با همین نام خلاصه‌برداری شده.


https://100go.co/


👑 @gopher_academy
🔥8👍32
🟢Unintended variable shadowing (#1)

🔵Avoiding shadowed variables can help prevent mistakes like referencing the wrong variable or confusing readers.

#tip #go

👑 @gopher_academy
👍3🎉2
سایت roadmap.sh‎ خوب بود، خوب تر هم شد. اخیرا شروع کرده به تعریف کردن پروژه های مرتبط با هر مسیر به صورت سطح بندی شده.


DevTwitter | <Amir/>

👑 @gopher_academy
👍141
🔵Unnecessary nested code (#2)

🟢Avoiding nested levels and keeping the happy path aligned on the left makes building a mental code model easier.


👑 @gopher_academy
👍5
🔵Misusing init functions (#3)

🟢When initializing variables, remember that init functions have limited error handling and make state handling and testing more complex. In most cases, initializations should be handled as specific functions.


👑 @gopher_academy
🍾3
🔵Overusing getters and setters (#4)

🟢Forcing the use of getters and setters isn’t idiomatic in Go. Being pragmatic and finding the right balance between efficiency and blindly following certain idioms should be the way to go.



👑 @gopher_academy
🍾3👍2
🔵Interface pollution (#5)

🟢Abstractions should be discovered, not created. To prevent unnecessary complexity, create an interface when you need it and not when you foresee needing it, or if you can at least prove the abstraction to be a valid one.



👑 @gopher_academy
👍4🕊1
در 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