Gopher Academy
3.34K subscribers
918 photos
40 videos
279 files
1.99K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔴عنوان مقاله👇

🟢Cogent Core: A New GUI Framework for Go

✍️ خلاصه مقاله:
این Cogent Core یک چارچوب جدید رابط کاربری گرافیکی (GUI) برای زبان برنامه‌نویسی Go است که با شعار "یک بار کدنویسی کنید و در همه‌جا اجرا کنید" برای پلتفرم‌های متعدد ارائه شده است. این چارچوب به هدف سادگی بیشتر نسبت به Gio و قدرت بیشتر نسبت به Fyne طراحی شده است. نکته جالب این است که وب‌سایت خود Cogent نیز با استفاده از این چارچوب ساخته شده و به WASM کامپایل شده است تا بر روی وب کار کند. همچنین، یک ویدیوی کوتاه برای معرفی و نمایش قابلیت‌های این چارچوب وجود دارد.

Cogent Core با ارائه یک محیط توسعه آسان و انعطاف‌پذیر، به توسعه‌دهندگان اجازه می‌دهد تا برنامه‌های گرافیکی را با کارایی بالا و با حداقل پیچیدگی ایجاد کنند. این چارچوب می‌تواند به عنوان یک انتخاب مناسب برای کسانی باشد که به دنبال ساخت برنامه‌های چندپلتفرمی با استفاده از زبان Go هستند.

🟣 لینک مقاله👇

🔵 https://www.cogentcore.org/blog/initial-release


👑 @gopher_academy
👍5
🔴عنوان مقاله👇

🟢Go features by version

✍️ خلاصه مقاله:
به بررسی ویژگی‌های اضافه شده به زبان برنامه‌نویسی Go در نسخه‌های مختلف آن می‌پردازد. این لیست جامع، نمایانگر پیشرفت‌های پیوسته و نوآوری‌های انجام شده در این زبان است و نشان می‌دهد که توسعه Go همچنان با سرعت قابل توجهی ادامه دارد. مقاله به طور دقیق به جزئیات ویژگی‌ها و بهبودهایی که در هر نسخه جدید ارائه شده‌اند، پرداخته است. برای مثال، اگر شما به دنبال آشنایی با ویژگی‌های نسخه 1.23 Go هستید، مقاله یادداشت‌های کاملی را در این باره ارائه می‌دهد.

این منبع برای توسعه‌دهندگان Go مفید است، زیرا به آن‌ها اجازه می‌دهد تا با ویژگی‌های جدید آشنا شده و از آن‌ها در پروژه‌های خود بهره ببرند. این مقاله تأکید می‌کند که Go نه تنها بهبود یافته، بلکه با افزودن ویژگی‌های جدید و به‌روزرسانی‌های امنیتی و عملکردی، به یک زبان قدرتمندتر تبدیل شده است.

🟣 لینک مقاله👇

🔵 https://antonz.org/which-go/


👑 @gopher_academy
👍4🕊1
🔴عنوان مقاله👇

🟢Render is Your Fastest Path to Production

✍️ خلاصه مقاله: .
مقاله "Render is Your Fastest Path to Production" به معرفی پلتفرم Render می‌پردازد که به توسعه‌دهندگان امکان می‌دهد به سرعت و با اطمینان برنامه‌های خود را ایجاد، مستقر و به‌روزرسانی کنند و به آسانی آن‌ها را در مقیاس گسترده توسعه دهند. این پلتفرم، که از مجموعه‌های مختلف فناوری پشتیبانی می‌کند، از اولین کاربر تا یک میلیارد کاربر را پوشش می‌دهد.

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

🔵 https://render.com/


👑 @gopher_academy
1👍1🎉1
🔴عنوان مقاله👇

🟢 Learn Go with Tests: A Refactoring Checklist

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

🟣 لینک مقاله👇
مقاله "Learn Go with Tests: A Refactoring Checklist" به بررسی تکنیک‌ها و زمان‌های مناسب برای refactoring در برنامه‌نویسی Go می‌پردازد. این فصل جدید از راهنمای معروف "Learn Go with Tests" به اهمیت refactoring و نکات کلیدی آن می‌پردازد. نویسنده ابتدا ضرورت refactoring را توضیح می‌دهد و سپس بر روی زمان‌های مناسب برای انجام آن تأکید می‌کند، مانند زمانی که کد پیچیده یا سخت به نگهداری می‌شود. مقاله همچنین تکنیک‌های اساسی refactoring را معرفی می‌کند، از جمله تقسیم کد به توابع کوچکتر، حذف کدهای تکراری و بهبود نام‌گذاری. هدف مقاله کمک به برنامه‌نویسان Go در شفاف‌سازی و بهبود کیفیت کد است تا کد خواناتر و قابل نگهداری‌تر شود.

🔵 https://quii.gitbook.io/learn-go-with-tests/testing-fundamentals/refactoring-checklist


👑 @gopher_academy
👍3🍾2🔥1
🔴عنوان مقاله👇

🟢Merge Go Code 10x Faster at Quality with AI-Driven Code Reviews

✍️ خلاصه مقاله: .
مقاله "Merge Go Code 10x Faster at Quality with AI-Driven Code Reviews" به بررسی ابزارهای بررسی کد مبتنی بر هوش مصنوعی برای تسریع فرآیند ادغام کد در پروژه‌های Go می‌پردازد. این ابزار جدید، با استفاده از بازبینی هوشمند و تحلیل خط به خط، بازخوردی مبتنی بر زمینه ارائه می‌دهد و به بهبود کیفیت کد کمک می‌کند. ویژگی‌های کلیدی آن شامل ارائه پیشنهادات دقیق برای بهبود کد و امکان گفتگوی هوشمند برای بررسی مسائل پیچیده‌تر است. مقاله همچنین به این نکته اشاره دارد که این ابزار یک دوره آزمایشی ۷ روزه رایگان دارد و برای پروژه‌های متن‌باز نیز به صورت رایگان قابل استفاده است. هدف اصلی این ابزار، تسریع فرآیند ادغام کد با حفظ کیفیت بالا و کاهش خطاهای انسانی است.

🟣 لینک مقاله👇

🔵 https://coderabbit.ai/


👑 @gopher_academy
2🍾2🔥1
🔵 عنوان مقاله
Implementing HTTP/0.9 from Scratch

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

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


👑 @gopher_academy
👍4🕊1🍾1
🔴 عنوان مقاله
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