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

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

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

ادمین:
@mrbardia72
Download Telegram
✍️shahriyar bayatshahriyar bayat


آشنایی با ابزار cadvisor برای مانیتورینگ کانیتنر های داکر

ابزار Cadvisor یکی از قدرتمند ترین ابزارهای مانیتورینگ برای کانتینر های داکره اول بریم ببینم چی هست و چه قابلیت هایی رو در اختیارمون میزاره
ابزار cAdvisor (Container Advisor) یه ابزار اپن‌سورس از گوگل هست که برای جمع‌آوری، پردازش و نمایش اطلاعات مصرف منابع (CPU، حافظه، شبکه و دیسک) کانتینرها طراحی شده. این ابزار به شما کمک می‌کنه تا به راحتی عملکرد و سلامت کانتینرهای Docker رو مانیتور کنید.

استفاده ازش چه مزایایی داره؟
cAdvisor به شما اجازه می‌ده تا مصرف منابع کانتینرها رو به صورت لحظه‌ای ببینید و به سرعت مشکلات رو شناسایی کنید.

این ابزار داشبوردهای گرافیکی ساده و user friendly ارائه می‌ده که اطلاعات مصرف منابع رو به صورت تصویری نمایش می‌ده.

ابزار cAdvisor به راحتی با Prometheus ادغام می‌شه و می‌تونید داده‌های جمع‌آوری شده رو برای تحلیل و نمایش‌های پیشرفته‌تر به Prometheus ارسال کنید.

نصب Cadvisor خیلی سادست. cAdvisor به راحتی به عنوان یه کانتینر Docker اجرا می‌شه و نیاز به کانفیگ پیچیده‌ای نداره.

اما یه سری محدودیت هم برای Cadvisor وجود داره،

متاسفانه cAdvisor بیشتر برای جمع‌آوری داده‌های پایه‌ای مصرف منابع کاربرد داره و ممکنه برای جمع‌آوری داده‌های پیشرفته‌تر محدودیت‌هایی داشته باشه.

خود cAdvisor هم به عنوان کانتینر در حال اجرا مقداری از منابع سیستم رو مصرف می‌کنه، بنابراین باید مصرف منابع این ابزار رو هم در نظر بگیرید.

چه جایگزین هایی براش وجود داره؟

یکی از اصلی ترین جایگزین های Cadvisor ترکیب prometheus & Grafana هست این دو ابزار با هم ترکیب می‌شن تا یه راه‌حل جامع برای مانیتورینگ و ویژوالیزیشن ارائه بدن. Prometheus برای جمع‌آوری داده‌ها و Grafana برای نمایش بصری اون‌ها استفاده می‌شه.

جایگزین دوم هم میتونه Datadog باشه یه پلتفرم مانیتورینگ و تحلیل که قابلیت‌های پیشرفته‌تری نسبت به cAdvisor داره و می‌تونه داده‌های مختلفی رو از کانتینرها جمع‌آوری کنه. بعدا حتما یه پست هم در مورد datadog میزارم.


👑 @gopher_academy
4👍3
🎯درود دوستان برای تبلیغات توی چنل ما می تونید به ای دی زیر پیام بدید و تعرفه ها رو براتون بفرستیم جهت تبلیغ:

@gopher_ads
👍46🎉2
🔴عنوان مقاله👇

🟢Resetting timers in Go

✍️ خلاصه مقاله:
مقاله به بررسی نحوه استفاده صحیح از تابع Timer.Reset() در زبان برنامه‌نویسی Go و تغییرات مرتبط با آن در نسخه‌های مختلف می‌پردازد. در نسخه‌های قبلی Go (تا 1.22)، استفاده از Timer.Reset() ممکن است به اشتباهات و مشکلاتی منجر شود. مقاله توضیح می‌دهد که چگونه تغییرات در نحوه مدیریت تایمرها و تنظیم مجدد آن‌ها می‌تواند به بهبود کارایی و جلوگیری از مشکلات ناشی از کدهای نادرست کمک کند.

نویسنده بر اهمیت استفاده صحیح از Timer.Reset() تأکید می‌کند و به توسعه‌دهندگان توصیه می‌کند که با به‌روزرسانی به نسخه‌های جدیدتر Go و پیروی از بهترین شیوه‌ها، از مشکلات احتمالی جلوگیری کنند. مقاله همچنین نمونه‌هایی از مشکلات متداول و راه‌حل‌های مناسب برای استفاده بهینه از تایمرها ارائه می‌دهد.

🟣 لینک مقاله👇

🔵 https://antonz.org/timer-reset/


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

🟢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