Gopher Academy
3.86K subscribers
935 photos
43 videos
280 files
2.27K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
Graceful Shutdown in Go

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

در مقاله اخیر خبرنامه Golang Weekly، نحوه پیاده‌سازی shutdown مؤثر و امن در برنامه‌های Go مورد بررسی قرار گرفته است. این فرآیند معمولاً با کنترل سیگنال‌های سیستم، مانند SIGINT یا SIGTERM، آغاز می‌شود. برنامه با دریافت این سیگنال، روند پایان‌کار را آغاز می‌کند و ابتدا کلیه درخواست‌های در حال پردازش را تمام می‌کند، سپس منابع را آزاد می‌سازد و در نهایت خارج می‌شود. این رویکرد به توسعه‌دهندگان کمک می‌کند تا برنامه‌هایی پایدارتر و قابل اطمینان‌تر بنویسند که بتوانند بدون مشکل در فرآیندهای 종료، کار خود را به پایان برسانند.

در این مقاله، ابزارها و روش‌های مختلفی برای پیاده‌سازی این مرحله نهایی در برنامه‌های Go معرفی شده است، از جمله استفاده از کانال‌ها، WaitGroups و context برای هماهنگ‌سازی پایان عملیات. رعایت این نکات کلیدی، خصوصاً در سرویس‌های وب و برنامه‌های سروری، می‌تواند به بهبود کارایی و کاهش خطاهای پس‌زمینه کمک کند. در نتیجه، هر برنامه‌نویس Go باید به اهمیت “Graceful Shutdown” واقف باشد و از بهترین روش‌ها برای پیاده‌سازی آن بهره گیرد.

#برنامه‌نویسی_گو #Shutdown_سلامت #کدنویسی_پایدار #نکات_مهم

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


👑 @gopher_academy
1👍1🍾1
Forwarded from Gopher Job
ایلان ماسک: دیگر هیچ رشته ای مانند کامپیوتر آینده ساز و پایدار نخواهد بود!
👾151
Forwarded from DevOps Labdon
🔵 عنوان مقاله
Kagenti: Cloud-native AI

🟢 خلاصه مقاله:
کاینجنتی یک پلتفرم میان‌افزاری (میان‌پایه) مبتنی بر ابر است که برای استقرار و مدیریت عوامل هوشمند چندچارچوبی هوش مصنوعی طراحی شده است. این پلتفرم به صورت بومی در محیط ابری ساخته شده و امکان راه‌اندازی و سازماندهی این عوامل را بر روی سیستم‌های کلاود مبتنی بر کوبرنتیس فراهم می‌کند. کاینجنتی از رابط‌های برنامه‌نویسی استاندارد REST استفاده می‌کند و با پشتیبانی از شناسه‌های دینامیک Managed by SPIRE و پروتکل‌های A2A و MCP، امنیت و سازگاری بالا را فراهم می‌آورد.

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

#هوش_مصنوعی #کلاود #کوبنتیس #پلتفرم‌های_باز

🟣لینک مقاله:
https://ku.bz/PtCLJSqjZ


👑 @DevOps_Labdon
1
Forwarded from Software Engineer Labdon
پردازش ۴۰ میلیارد رکورد در روز — معماری یک سیستم مقیاس‌پذیر!
خیلی‌ها فکر می‌کنن پردازش ده‌ها میلیارد رکورد در روز فقط از پس غول‌های جهانی مثل Meta یا Netflix برمیاد — اما من یک معماری عملیاتی ساختم که روزانه بالغ بر ۴۰ میلیارد رکورد (معادل تقریبا ۵۰۰ هزار رکورد بر ثانیه) رو از Kafka مصرف و به‌صورت بهینه در ClickHouse ذخیره می‌کنه.

چالش اصلی
بار نامتعادل روی کلاستر توزیع‌شده شلوغ با ۲۰ نود و ۵۲ پارتیشن و عدم تفکیک داده
نیاز به پردازش کم‌تأخیر
حفظ Consistency در حجم عظیم داده

راه‌حل معماری
مصرف‌کننده‌های موازی با Unbounded Channel
پردازش کاملاً Stateless برای scale عمودی و افقی
دسته‌بندی و فشرده‌سازی در Batchهای ۱,۰۰۰,۰۰۰ رکوردی (قابل کانفیگ)
نوشتن مستقیم در ClickHouse با Insertهای ستون‌محور
و Commit offset تنها بعد از نوشتن موفق
جدا کردن مسیر ingest از persist برای افزایش throughput

<Amirhossein Maleki/>
در دنیای برنامه‌نویسی (مخصوصاً Go و سیستم‌های performance-critical)، اصطلاحات زیادی شبیه CPU-bound hot path داریم که برای تحلیل performance استفاده می‌شن.

اینجا براتون کامل‌ترین لیست اصطلاحات مهم رو گذاشتم – بسیار بدردتون می‌خوره 👇

🧠 1) CPU-bound

کدی که محدودیتش CPU هست، نه I/O.

🧠 2) I/O-bound

کدی که محدودیتش عملیات ورودی/خروجی هست:
شبکه
دیسک
دیتابیس
فایل‌سیستم
مثال:

resp, _ := http.Get(url) // IO-bound

🧠 3) Memory-bound

وقتی سرعت برنامه توسط سرعت دسترسی به حافظه محدود می‌شود:

اcache miss زیاد
اdata layout بد
اallocation زیاد
مثلاً:

bigArray := make([]int, 10_000_000)

🧠 4) Hot Path / Hot Loop

مسیر پرتکرار اجرای برنامه
بهینه‌سازی این بخش بیشترین اثر را دارد.

🧠 5) Cold Path

مسیر کم‌استفاده، چندان بحرانی نیست.

🧠 6) Critical Path

مسیر اصلی که کل latency سیستم به آن وابسته است.

🧠 7) Fast Path / Slow Path

پترن بسیار معروف در performance:

اFast path → مسیر سریع، معمولاً برای شرایط رایج

اSlow path → مسیر fallback برای شرایط غیرمعمول


مثال Go runtime:

if smallAllocation {
fastPath()
} else {
slowPath() // calls GC-heavy functions
}


🧠 8) Cold Cache / Hot Cache

وقتی داده در CPU cache باشد (hot) یا نباشد (cold).

🧠 9) Cache Miss / Cache Hit

اCache hit → داده در L1/L2 است → بسیار سریع

اCache miss → باید از RAM بخواند → خیلی کند

🧠 10) Branch Mis-Prediction

وقتی CPU حدس اشتباهی درباره if/else بزند → باعث لَگ و flush pipeline می‌شود.

🧠 11) Lock Contention

وقتی چند goroutine برای دسترسی به یک lock دعوا دارند.

🧠 12) False Sharing

وقتی چند goroutine روی فیلدهایی که روی یک cache line قرار گرفته‌اند می‌نویسند → باعث کاهش شدید performance می‌شود.

🧠 13) Data Locality

یعنی داده‌های مربوط به هم کنار هم در حافظه قرار گرفته باشند.

🧠 14) Zero-copy

یعنی انتقال داده بدون duplicate در حافظه — بسیار مهم در شبکه.

🧠 15) Throughput vs Latency

اLatency: زمان انجام یک عملیات

اThroughput: تعداد عملیات در واحد زمان


دو مفهوم کلیدی در performance.

🧠 16) Backpressure

وقتی مصرف‌کننده نمی‌تواند سرعت تولیدکننده را تحمل کند → سیستم فشار می‌دهد که سرعت کم شود.

🧠 17) Bottleneck

گلوگاه سرعت سیستم؛ جایی که سیستم را کند می‌کند.

🧠 18) Profiling


🧠 19) Micro-optimizations

بهینه‌سازی‌های کوچک مثل:

اinline کردن
حذف allocation
کم کردن branch اضافی

🧠 20) Dead Time / Idle Time

وقتی CPU یا goroutine منتظر I/O است → idle است.

🧠 21) Parallelism vs Concurrency

تفاوت بسیار مهم:

اconcurrency برنامه‌ات می‌تواند چند کار را مدیریت کند

اparallelism یعنی چند کار همزمان روی چند core اجرا می‌شود

🧠 22) Work Stealing

استراتژی scheduler مثل Go برای توزیع goroutineها بین CPU cores.

🧠 23) GC Pressure

وقتی کد باعث heap allocation زیاد شود → GC زیاد فعال می‌شود → performance می‌خورد زمین.

🧠 24) Hot Allocation

وقتی یک تخصیص حافظه در مسیر پرتکرار برنامه انجام می‌شود → شدیداً performance را نابود می‌کند.

🧠 25) Cold Start

وقتی برنامه یا فانکشن بعد از مدت طولانی دوباره اجرا می‌شود و warm نیست — معمولاً کندتر.

👉 https://t.iss.one/addlist/AJ7rh2IzIh02NTI0
5🍾1
🎙️ عنوان پادکست:
🍪 No more all-you-can-eat Cookies
خلاصه پادکست:
Security releases🍪 Go 1.25.2 and 1.24.8 with 10 security fixes🌐 golang.org/x/net v0.45.0 with 2 security fixesMeetups @ Conferences🇺🇸 San Fransisco, CA, USA — Oct 23 @ Forge🇮🇱 Tel Aviv, Israel — Dec 10 @ Cato Networks🇺🇸 GoWest @ Lehi, Utah USA — Oct 24🧦 New swag in the Cup o' Go store!Proposals👷🏿‍♀️ Accepted: go fix to apply fixes from modernizers and gofix analyzersOn hold: Add experimental HTTP/3 support👖 gofumpt: Should clothing naked returns b...
🏆1
🔵 عنوان مقاله
Modernizing Reddit's Backend Infrastructure (with Go)

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

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

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

#توسعه_وب #مدرن‌سازی_زیرساخت #گودرتیکرد #پایگاه‌داده

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


👑 @gopher_academy
🍾2
متد `time.NewTicker` برای اجرای عملیاتی تکراری در فواصل زمانی مشخص به کار می‌رود.

📌 تعریف:

ticker := time.NewTicker(duration)


duration → فاصله زمانی بین اجرای هر بار (مثلاً: 1*time.Second)
* اticker.C → یک کانال (channel) است که هر بار بعد از گذشت مدت زمان مشخص، یک مقدار time.Time در آن ارسال می‌شود.

🧠 کاربرد اصلی:

اجرای یک عملیات به صورت پریودیک (دوره‌ای)
مثلاً برای:

چک کردن وضعیت سرویس‌ها
خواندن داده از صف یا کانال
اجرای یک تسک background در فواصل زمانی مشخص


مثال ساده:

package main

import (
"fmt"
"time"
)

func main() {
ticker := time.NewTicker(2 * time.Second)
defer ticker.Stop()

for i := 0; i < 5; i++ {
t := <-ticker.C
fmt.Println("Tick at", t)
}
}


⏱️ خروجی:

Tick at 2025-12-06 10:57:34.182664644 +0330 +0330 m=+2.000047534
Tick at 2025-12-06 10:57:36.182664842 +0330 +0330 m=+4.000047715
Tick at 2025-12-06 10:57:38.182665098 +0330 +0330 m=+6.000047982
Tick at 2025-12-06 10:57:40.182664344 +0330 +0330 m=+8.000047217
Tick at 2025-12-06 10:57:42.182664808 +0330 +0330 m=+10.000047690


⚠️ نکات مهم:

* حتماً بعد از پایان استفاده ticker.Stop() فراخوانی بشه تا نشتی منابع (goroutine leak) نداشته باشیم.
NewTicker در کنار select هم بسیار کاربرد داره.
🏆2🐳1
🔵 عنوان مقاله
Avoiding Splintered Failure Modes in Go

🟢 خلاصه مقاله:
در برنامه‌نویسی با زبان گو، یکی از چالش‌های مهم جلوگیری از بروز خطاهای جدی در ساختارهای نرم‌افزاری است. یکی از مشکلات رایج در توسعه برنامه‌ها، شکست‌های شکسته یا جدا شده (Splintered Failure Modes) هستند که ممکن است منجر به شکست‌های سخت و دشوار در عیب‌یابی شوند. بنابراین، پیشگیری از این نوع شکست‌ها اهمیت زیادی دارد تا برنامه‌های پایدار و قابل اعتماد ساخته شوند.

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

در نهایت، پیروی از این رویکردها و تمرینات به توسعه‌دهندگان کمک می‌کند تا نرم‌افزارهای قدرتمند و مقاوم در برابر شکست‌های پیچیده بسازند و از بروز مشکلات سخت و غیرقابل کنترل جلوگیری کنند. این استراتژی‌ها پایه‌ای برای تولید سیستم‌های پایدار و مؤثر در دنیای پیچیده فناوری مدرن است.

#برنامه‌نویسی #گو #پایداری_نرم‌افزار #توسعه_مقاوم

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


👑 @gopher_academy
👍21
📌 ارور copylocks

🧩 ارور رایج Go:

assignment copies lock value to ... (copylocks)


اگه توی ساختار‌هات از sync.Mutex یا sync.RWMutex استفاده می‌کنی و ناگهان این خطا رو دیدی، یعنی داری یک struct که داخلش lock داره رو *کپی* می‌کنی — و این توی Go ممنوعه! 🚫

🔍 مشکل از کجاست؟

فرض کن تعریف پروژه به این شکله:

type Project struct {
ID string
mu sync.RWMutex
}


و تو این کار رو انجام می‌دی:

project = *projectFromCache


اینجا Go میگه:

> داری یک Mutex رو کپی می‌کنی!
>و Mutex نباید کپی بشه، چون ممکنه لاک شده باشه و نسخهٔ کپی‌شده وضعیت اشتباه داشته باشه.

این باعث deadlock میشه.

بهترین راه‌حل

به‌جای کپی‌کردن struct، فقط اشاره‌گر رو منتقل کن:

project = projectFromCache


🔹 با این کار Mutex کپی نمی‌شه
🔹 فقط آدرس struct منتقل میشه
🔹 رفتار کاملاً امن و درست می‌مونه

🎯 نکته طلایی

هر وقت struct شامل Mutex بود:

کپی struct ممنوع
✔️ استفاده از pointer توصیه‌شده
👍4🍾1
Forwarded from AI Labdon
🔥 گوگل ، مسیر شغلی آیندت رو مشخص میکنه | معرفی ابزار career Dreamer

▪️گوگل یه ابزار جدید داده بیرون به اسم Career Dreamer (فعلاً فقط با IP آمریکا) ، این سرویس با کمک هوش مصنوعی، علایق و مهارت‌هاتو آنالیز میکنه و دقیقاً میگه کدوم مسیر شغلی بهت میخوره.

1⃣ تحلیل شخصی هوشمند
• اطلاعات تجربیات و توانایی‌هاتو می‌گیره و مسیرهای شغلی مناسب پیشنهاد می‌کنه.

2⃣ آموزش رایگان
• به دوره‌های رایگان Grow with Google وصل میشه تا مهارت‌های لازم همون شغل رو یاد بگیری.

3⃣ ساخت رزومه با Gemini
• به Gemini وصل میشه و خودش برات رزومه، کاور لتر و متن‌های حرفه‌ای استخدامی می‌سازه.

🔗 لینک دسترسی : career Dreamer
(فعلاً فقط با IP آمریکا کار میکنه)

👉 https://t.iss.one/addlist/AJ7rh2IzIh02NTI0
🔵 عنوان مقاله
The Type-Safe Error Checking Proposal

🟢 خلاصه مقاله:
پیشنهاد بررسی خطاهای نوع‌ساز در زبان برنامه‌نویسی گو

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

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

#برنامه_نویسی #گو #خطا #نسخه_جدید

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


👑 @gopher_academy
👍1
🔵 عنوان مقاله
Go 1.25.5 and 1.24.11 have both been released

🟢 خلاصه مقاله:
نسخه‌های Go 1.25.5 و 1.24.11 همزمان منتشر شدند که هر دو شامل به‌روزرسانی‌های جزئی به همراه دو اصلاح مربوط به امنیت در بخش crypto/x509 هستند. این بروزرسانی‌ها با هدف ارتقاء امنیت و پایداری زبان برنامه‌نویسی Go ارائه شده است و توسعه‌دهندگان را تشویق می‌کند تا این نسخه‌ها را نصب و از مزایای آن بهره‌مند شوند. اطلاع‌رسانی در مورد این نسخه‌ها نشان می‌دهد که تیم توسعه‌دهنده همواره در حال پیگیری و رفع آسیب‌پذیری‌های امنیتی است تا کاربران در محیط‌های مختلف، نرم‌افزار مطمئنی داشته باشند.

#برنامه‌نویسی #امنیت #گو #آپدیت

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


👑 @gopher_academy
Forwarded from Bardia & Erfan
چندتا از حرف‌های عجیبی که این روزا تو فضای مجازی زیاد میبینیم :

- دیگه با AI، برنامه نویسی به درد نمیخوره و برنامه نویس ها بیکار میشند

- دیگه طراحی یاد گرفتن به درد نمیخوره، چون AI همه را انجام میده.

+ هر چقدر شما تو هر زمینه ای مهارتت بیشتر باشه، قدرت و سرعت و بازدهیت چندین برابر میشه با AI. هیچ کدوم از این مهارتها را AI جایگزین نمیکنه، برعکس اونایی که این مهارتها را بلدند 10x بهتر میکنه. پس تا میتونید این مهارت/تخصص ها را یادبگیرید.
👍31
🔵 عنوان مقاله
'Re-exec' Testing Go Subprocesses

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

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

در نهایت، این رویکرد، روشی کارآمد برای توسعه‌دهندگانی است که نیاز دارند تست‌های جامع و قابل اعتماد برای برنامه‌هایی با subprocess بنویسند و به بهبود کیفیت کدهای خود در محیط‌های مختلف کمک کنند.

#تست_کد #زبان_برنامه_نویسی_Go #processes #توسعه_نرم‌افزار

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


👑 @gopher_academy