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
🟢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
🔵 عنوان مقاله
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