Gopher Academy
3.83K subscribers
961 photos
45 videos
282 files
2.77K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
اصطلاح one-shot ramp-up
بسته به زمینه (نرم‌افزار، DevOps، AI یا سخت‌افزار) کمی متفاوت است، اما مفهوم کلی آن این است:
راه‌اندازی یا افزایش ظرفیت در یک مرحله و به‌صورت یکباره، بدون افزایش تدریجی.
معنی واژه‌ها
One-shot =
یک‌باره، در یک مرحله، بدون تکرار
Ramp-up =
افزایش تدریجی ظرفیت، سرعت، بار یا عملکرد تا رسیدن به سطح موردنظر
وقتی این دو کنار هم قرار می‌گیرند، منظور این است که به‌جای افزایش تدریجی، سیستم مستقیماً به ظرفیت نهایی یا موردنظر می‌رسد.

مثال در توسعه نرم‌افزار
فرض کنید یک سرویس باید ۱۰۰۰ Worker اجرا کند.
درواقعه Ramp-up یعنی تدریجی

ثانیه 1 → 100 Worker
ثانیه 2 → 200 Worker
ثانیه 3 → 300 Worker
ثانیه 10 → 1000 Worker

One-shot ramp-up

ثانیه 1 → 1000 Worker
همه Workerها یک‌باره ایجاد می‌شوند.

مثال در تست بار (Load Testing)
در ابزارهایی مانند k6 یا JMeter:
Ramp-up
یعنی تعداد کاربران مجازی به‌تدریج افزایش پیدا کند.

One-shot ramp-up
یعنی تمام کاربران مجازی هم‌زمان شروع به ارسال درخواست کنند.
مثلاً:

1000 Virtual Users
Normal Ramp-up:
0 → 1000 در مدت 5 دقیقه
One-shot Ramp-up:
0 → 1000 در کمتر از یک ثانیه

مثال در Kubernetes
فرض کنید Deployment شما باید ۵۰ Pod داشته باشد.

اRamp-up معمولی:
ا Podها به‌تدریج ساخته می‌شوند.

One-shot ramp-up: Scheduler
تلاش می‌کند هر ۵۰ Pod را تقریباً هم‌زمان ایجاد کند (البته با توجه به محدودیت‌های کلاستر).
مزایا
رسیدن سریع به ظرفیت کامل
مناسب برای تست فشار (Stress Testing)
کاهش زمان راه‌اندازی

معایب
افزایش ناگهانی مصرف CPU و RAM
احتمال ایجاد Thundering Herd Problem (هجوم هم‌زمان تعداد زیادی درخواست یا پردازش)
افزایش احتمال Timeout یا فشار روی دیتابیس و سرویس‌های وابسته

جمع‌بندی
این One-shot ramp-up یعنی سیستم، کاربران، Workerها یا منابع در یک مرحله و تقریباً هم‌زمان به ظرفیت هدف برسند، نه اینکه به‌صورت تدریجی افزایش پیدا کنند. این اصطلاح معمولاً در زمینه‌های Load Testing، سیستم‌های توزیع‌شده، Kubernetes، سرویس‌های ابری و پردازش موازی استفاده می‌شود.
🔵 عنوان مقاله
Supervised Fire-and-Forget Tasks in Go

🟢 خلاصه مقاله:
در برنامه‌نویسی همگام‌سازی با زبان گو، مفهوم "وظایف ناپایدار و بدون نیاز به نظارت مستقیم" یا همان "fire-and-forget" بسیار کاربردی است. این نوع وظایف عموماً وظایفی هستند که اجرا می‌شوند و برنامه بدون انتظار نتیجه‌ی مستقیم از آن‌ها ادامه می‌دهد. در کنار این، مدیریت همزمان وظایف، تضمین صحت اجرا، و محافظت در برابر خطاهای تصادفی اهمیت ویژه‌ای دارد؛ چیزی که در روش‌های ساده با استفاده از کدهای خام `go func()` ممکن است نادیده گرفته شود.

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

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

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

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

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

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

🟣لینک مقاله:
https://rednafi.com/go/supervised-fire-and-forget/


👑 @gopher_academy
پنیک برای خطاهای «غیرمنتظره و غیرقابل‌ادامه» هست، نه برای خطاهای معمولیِ برنامه. فلسفه‌ی گو اینه که خطاهای عادی (مثل نبود فایل، ورودی نامعتبر و...) با error برگردونده بشن و صریح هندل بشن، ولی پنیک برای جاهایی هست که یه چیزی اونقدر غیرمنتظره یا خطرناکه که ادامه‌ی اجرا اصلاً منطقی نیست.

کاربردهای واقعی:
- باگ‌های برنامه‌نویسی: nil pointer dereference، index خارج از رنج آرایه، تقسیم بر صفر - اینا خودکار پنیک می‌کنن چون معمولاً نشونه‌ی باگ هستن نه یه حالت قابل پیش‌بینی

- نقض invariant: مثلاً یه تابع که فرض می‌کنه فلان شرط همیشه برقراره، اگه برقرار نبود پنیک می‌کنه چون یعنی جای دیگه‌ای از کد خراب کار کرده

- خطاهای init: اگه توی init() یا شروع برنامه یه چیز حیاتی (مثل اتصال به دیتابیس ضروری) شکست بخوره، ادامه دادن بی‌فایده‌ست

نکته‌ی مهم: پنیک لزوماً کل برنامه رو نمی‌کشه. با recover() داخل یه defer می‌شه جلوشو گرفت. الگوی رایج توی وب‌سرورها اینه که هر هندلر یه middleware داره که پنیک رو recover می‌کنه، لاگ می‌کنه، و فقط همون request رو با خطا جواب می‌ده - بقیه‌ی سرور نمی‌خوابه.

خلاصه:
اگه خطا قابل پیش‌بینیه و caller باید تصمیم بگیره → error. اگه یه چیز نباید هیچ‌وقت اتفاق بیفته و اتفاق افتاده (یعنی باگه) → panic.
2
🔰 آموزش کامل دستور go env در Go قسمت اول — CGO و ارتباط Go با C
━━━━━━━━━━━━━━━━━━
ببینیم این CGO چیه؟
ابزاریه که به Go اجازه می‌ده مستقیماً با کدهای C و C++ ارتباط برقرار کنه.

▫️ CGO_ENABLED=1

فعاله. اگه 0 بشه، Go فقط کد خالص Go کامپایل می‌کنه و به هیچ کتابخونه C نیازی نداره.

▫️ CGO_CFLAGS='-O2 -g'
فلگ‌های کامپایل فایل‌های .c-O2 یعنی بهینه‌سازی سطح ۲ → -g یعنی اطلاعات debug ذخیره بشه

▫️ CGO_CXXFLAGS='-O2 -g'
همین فلگ‌ها ولی برای فایل‌های .cpp (C++)

▫️ CGO_CPPFLAGS=''
فلگ‌های پیش‌پردازنده C/C++ — مثلاً تعریف ماکرو با -DNAME=VALUE

▫️ CGO_FFLAGS='-O2 -g'
فلگ‌های کامپایل Fortran (خیلی کم استفاده می‌شه)

▫️ CGO_LDFLAGS='-O2 -g'
فلگ‌های لینکر — مشخص می‌کنه چطور فایل‌های آبجکت به هم وصل بشن

💡 نکته کاربردی:
اگه پروژه‌ت به هیچ کتابخونه C نیازی نداره، می‌تونی CGO رو غیرفعال کنی:
CGO_ENABLED=0 go build .

این کار باعث می‌شه باینری کاملاً مستقل (static) بشه و نیازی به نصب هیچ چیزی روی سرور نداشته باشه
#golang #go #آموزش_برنامه‌نویسی #backend
👍1🍾1
Gopher Academy
🔰 آموزش کامل دستور go env در Go قسمت اول — CGO و ارتباط Go با C ━━━━━━━━━━━━━━━━━━ ببینیم این CGO چیه؟ ابزاریه که به Go اجازه می‌ده مستقیماً با کدهای C و C++ ارتباط برقرار کنه. ▫️ CGO_ENABLED=1 فعاله. اگه 0 بشه، Go فقط کد خالص Go کامپایل می‌کنه و به…
🔰 آموزش کامل دستور go env در Go قسمت دوم — کامپایلرها، معماری و سیستم‌عامل
━━━━━━━━━━━━━━━━━━
🛠 کامپایلرها

▫️ CC=gcc
کامپایلر C که CGO ازش استفاده می‌کنه (می‌تونی عوضش کنی، مثلاً clang)


▫️ CXX=g++
کامپایلر C++ که CGO ازش استفاده می‌کنه


▫️ AR=ar
ابزار ساخت کتابخونه‌های استاتیک


▫️ GCCGO=gccgo
کامپایلر جایگزین GCC-based برای Go (به جای کامپایلر رسمی Go)


▫️ PKG_CONFIG=pkg-config
ابزار پیدا کردن کتابخونه‌های سیستم برای CGO مثلاً وقتی می‌نویسی
// #cgo pkg-config: openssl

▫️ GOGCCFLAGS='-fPIC -m64 -pthread ...'
فلگ‌های داخلی که Go خودش به GCC پاس می‌ده (معمولاً دستی تغییرشون نمی‌دی)

━━━━━━━━━━━━━━━━━━
🖥 معماری و سیستم‌عامل
▫️ GOOS=linux
سیستم‌عامل هدف کامپایل
▫️ GOARCH=amd64

معماری هدف (64 بیتی x86)

▫️ GOHOSTOS=linux

سیستم‌عامل ماشین شما


▫️ GOHOSTARCH=amd64

معماری ماشین شما


▫️ GOAMD64=v1

نسخه پشتیبانی از AMD64: → v1 پایه (همه CPU های x86-64) → v2 — پشتیبانی از SSE4, POPCNT → v3 — AVX, AVX2 (CPU های مدرن‌تر) → v4 — AVX-512 (Intel Xeon سری جدید)


▫️ GOEXE=''

پسوند فایل اجرایی → در Linux خالیه → در Windows مقدارش .exe می‌شه
━━━━━━━━━━━━━━━━━━
💡 Cross Compilation در Go خیلی ساده‌ست:
GOOS=windows GOARCH=amd64 go build .

همین یه خط کافیه تا برنامه‌ات رو روی Linux برای Windows کامپایل کنی! 🚀
#golang #go #آموزش_برنامه‌نویسی #backend
👍1🔥1🍾1
Gopher Academy
🔰 آموزش کامل دستور go env در Go قسمت دوم — کامپایلرها، معماری و سیستم‌عامل ━━━━━━━━━━━━━━━━━━ 🛠 کامپایلرها ▫️ CC=gcc کامپایلر C که CGO ازش استفاده می‌کنه (می‌تونی عوضش کنی، مثلاً clang) ▫️ CXX=g++ کامپایلر C++ که CGO ازش استفاده می‌کنه ▫️ AR=ar ابزار…
🔰 آموزش کامل دستور go env در Go قسمت سوم — مسیرها و مدیریت ماژول


📁 مسیرهای مهم

▫️ GOBIN=''


محل نصب باینری‌های go install اگه خالی باشه → به $GOPATH/bin می‌ره


▫️ GOCACHE=/home/USER/.cache/go-build


کش کامپایل — باعث می‌شه build های بعدی خیلی سریع‌تر باشن


▫️ GOMODCACHE=/home/USER/go/pkg/mod

محل ذخیره ماژول‌های دانلودشده


▫️ GOENV=/home/USER/.config/go/env

فایل تنظیمات محیطی Go — متغیرهایی که با go env -w ست می‌کنی اینجا ذخیره می‌شن


▫️ GOTOOLDIR=/snap/go/11067/pkg/tool/linux_amd64


محل ابزارهای داخلی Go مثل compile و link

📦 مدیریت ماژول


▫️ GOMOD=/dev/null

مسیر فایل go.mod پروژه جاری → /dev/null یعنی الان خارج از یه ماژول هستی! (وقتی وارد پروژه‌ات بشی، مسیر go.mod رو نشون می‌ده)


▫️ GO111MODULE=''

حالت ماژول — خالی یعنی

autoon — همیشه ماژول → off — همیشه GOPATH قدیمی → auto — بستگی به وجود go.mod داره


▫️ GOWORK=''

مسیر فایل go.work برای Workspace Mode (وقتی روی چند ماژول همزمان کار می‌کنی)


▫️ GOFLAGS=''

فلگ‌های پیش‌فرض برای همه دستورات Go مثلاً: GOFLAGS='-mod=vendor'

💡 تنظیم دائمی متغیرها:
go env -w GOBIN=/usr/local/bin
go env -w GOPROXY=https://goproxy.io,direct

این تغییرات در فایل GOENV ذخیره می‌شن
#golang #go #آموزش_برنامه‌نویسی #backend
👍1
Gopher Academy
🔰 آموزش کامل دستور go env در Go قسمت سوم — مسیرها و مدیریت ماژول 📁 مسیرهای مهم ▫️ GOBIN='' محل نصب باینری‌های go install اگه خالی باشه → به $GOPATH/bin می‌ره ▫️ GOCACHE=/home/USER/.cache/go-build کش کامپایل — باعث می‌شه build های بعدی خیلی سریع‌تر…
📮 پست ۴ از ۴
🔰 آموزش کامل دستور go env در Go قسمت چهارم — پروکسی، امنیت و تنظیمات Runtime
━━━━━━━━━━━━━━━━━━
🌐 پروکسی و امنیت ماژول

▫️ GOPROXY=https://proxy.golang.org,direct
سرور دانلود ماژول‌ها → ابتدا از پروکسی رسمی Google دانلود می‌کنه → اگه پیدا نشد، مستقیم از source می‌ره
go env -w GOPROXY=https://goproxy.io,direct

▫️ GOSUMDB=sum.golang.org
سرور تأیید امنیت ماژول‌ها — مطمئن می‌شه کدی که دانلود می‌کنی دستکاری نشده

▫️ GONOSUMDB=''
ماژول‌هایی که نباید checksum بشن (مثلاً ریپوهای خصوصی)

▫️ GONOPROXY=''
ماژول‌هایی که مستقیم از source دانلود می‌شن و bypass پروکسی می‌کنن

▫️ GOPRIVATE=''
ماژول‌های خصوصی — هم GONOPROXY هم GONOSUMDB رو یکجا تنظیم می‌کنه مثال:
go env -w GOPRIVATE=github.com/mycompany/*

▫️ GOAUTH=netrc
روش احراز هویت برای ریپوهای خصوصی از فایل ~/.netrc برای username/password استفاده می‌کنه

▫️ GOINSECURE=''
ماژول‌هایی که می‌شه بدون HTTPS دانلودشون کرد (توصیه نمی‌شه!)
━━━━━━━━━━━━━━━━━━
⚙️ تنظیمات Runtime و رفتار کامپایلر

▫️ GOVERSION=go1.26.6
نسخه Go نصب‌شده

▫️ GOTOOLCHAIN=auto
مدیریت toolchain: → auto — اگه پروژه نسخه جدیدتری خواست، خودکار دانلود می‌کنه → local — فقط از نسخه نصب‌شده استفاده کن → go1.24.0 — نسخه مشخص

▫️ GODEBUG=''
تنظیمات debug برای runtime مثال:
GODEBUG=asyncpreemptoff=1,gccheckmark=1

▫️ GOFIPS140=off
استاندارد رمزنگاری دولتی آمریکا (FIPS 140) برای اکثر پروژه‌ها نیازی نیست

▫️ GOVCS=''
محدودیت روش‌های Version Control برای دانلود مثال:
GOVCS=*:git,hg
— فقط git و Mercurial

▫️ GOTELEMETRY=local
داده‌های آماری ارسال به Google: → local — فقط محلی ذخیره بشه on — به Google ارسال بشه → off — کاملاً غیرفعال

▫️ GOEXPERIMENT=''
قابلیت‌های آزمایشی که هنوز رسمی نشدن
👍1🔥1
Media is too big
VIEW IN TELEGRAM
🟢معرفی قابلیت‌های جدید زبان Go در نسخه‌های Go 1.25 و Go 1.26

در این ویدئو تیم Go درباره‌ی تغییرات مهم نسخه‌های جدید صحبت می‌کند؛
و بررسی ویژگی‌های جدید این نسخه‌ها:👇
🔴Green Tea GC
🔴Runtime improvements
🔴Compiler optimizations
🔴New standard library APIs
🔴Vector instructions

@gopher_academy
👍4
Forwarded from KnowledgeHub
کتاب «اپل در چین: تسخیر بزرگ‌ترین شرکت جهان»

(Apple in China: The Capture of the World's Greatest Company)

اثری جذاب و خواندنی از پاتریک مک‌گی است.

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

https://xn--r1a.website/+Bp8JeTpQoiUwMjVk
1🔥1
اگه با گوروتین‌ها کار می‌کنی و می‌ترسی یه جا کنترل از دستت در بره، این یکی به کارت میاد:
github.com/panjf2000/ants

یه pool مدیریت گوروتینه؛ به‌جای اینکه هزارتا گوروتین بی‌حساب‌وکتاب باز کنی، تعدادشون رو محدود و بازیافت می‌کنه، پنیک‌ها رو هم قشنگ مدیریت می‌کنه که برنامه‌ت کرش نکنه. شرکت‌های بزرگی مثل Tencent و ByteDance و Shopify هم توی پروداکشن ازش استفاده می‌کنن.
1🔥1
ویژگی Vector Instructions در گولنگ

🧠 اول از همه ما باید درک کنیم که CPU چطور کار می‌کنه؟
حالت معمولی:
مثال: جمع ۴ عدد
a[0] + b[0] = c[0] ← دستور ۱
a[1] + b[1] = c[1] ← دستور ۲
a[2] + b[2] = c[2] ← دستور ۳
a[3] + b[3] = c[3] ← دستور ۴

مجموع: ۴ دستور CPU

حالت Vector (SIMD):
مثال:
[a0, a1, a2, a3] + [b0, b1, b2, b3] = [c0, c1, c2, c3]

مجموع: ۱ دستور CPU

SIMD = Single Instruction, Multiple Data
یعنی
یه دستور چند داده همزمان
📦 رجیسترهای Vector در CPU رجیسترهای مخصوصی داره که می‌تونن داده‌های بیشتری نگه دارن:

رجیستر معمولی (64 بیت):
یه عدد int64

رجیستر XMM — SSE (128 بیت):

│ float32│ float32│ → 2 عدد همزمان

│ یه float64 │ → یا 1 عدد 64 بیتی


رجیستر YMM — AVX2 (256 بیت):
┌──────┬──────┬──────┬──────┐
│ f32 │ f32 │ f32 │ f32 │ → 4 عدد همزمان
└──────┴──────┴──────┴──────┘

رجیستر ZMM — AVX-512 (512 بیت):
┌────┬────┬────┬────┬────┬────┬────┬────┐
│ f32│ f32│ f32│ f32│ f32│ f32│ f32│ f32│ → 8 عدد همزمان
└────┴────┴────┴────┴────┴────┴────┴────┘

🔗 ارتباط با GOAMD64
GOAMD64='v1'   # بدون vector خاص — فقط x86-64 پایه

GOAMD64='v2' # + SSE4.1, SSE4.2, POPCNT

GOAMD64='v3' # + AVX, AVX2 (256 بیتی)

GOAMD64='v4' # + AVX-512 (512 بیتی)

یعنی وقتی GOAMD64=v3 می‌ذاری، به Go می‌گی:
«مطمئنم CPU ای که این کد اجرا می‌شه AVX2 داره، از رجیسترهای 256 بیتی استفاده کن!»

🔄 درواقعه Go چطور از Vector استفاده می‌کنه؟

روش ۱ Auto-Vectorization (خودکار)
کامپایلر Go بعضی حلقه‌ها رو خودش تشخیص می‌ده و بهینه می‌کنه:
func addSlices(a, b, c []float32) {
for i := range a {
c[i] = a[i] + b[i]
}
}

//کامپایلر پشت صحنه
(با GOAMD64=v3):
// به جای 8 دستور جداگانه، یه دستور VADDPS می‌زنه
// که 8 تا float32 رو همزمان جمع می‌کنه

روش ۲ پکیج math/bits و استانداردها
import "math/bits"

// این تابع کامپایلر می‌دونه باید از دستور POPCNT استفاده کنه
n := bits.OnesCount64(x) // شمارش بیت‌های ۱
n := bits.RotateLeft64(x, k) // چرخش بیت

روش ۳ Assembly دستی (پیشرفته)
// فایل add_amd64.s
TEXT ·addSlicesAVX(SB), NOSPLIT, $0
VMOVUPS (SI), Y0 // بارگذاری 8 float32 از slice a
VMOVUPS (DX), Y1 // بارگذاری 8 float32 از slice b
VADDPS Y1, Y0, Y0 // جمع همزمان 8 عدد
VMOVUPS Y0, (DI) // ذخیره نتیجه
RET

روش ۴ — پکیج golang.org/x/sys/cpu
import "golang.org/x/sys/cpu"

// تشخیص قابلیت‌های CPU در runtime
if cpu.X86.HasAVX2 {
addWithAVX2(a, b, c)
} else {
addNormal(a, b, c)
}

📊 مثال واقعی تفاوت سرعت
عملیات: جمع دو slice با ۱۰۰۰ عدد float32


بدون Vector (GOAMD64=v1): ~250 ns

با SSE4 (GOAMD64=v2): ~80 ns → 3x سریع‌تر

با AVX2 (GOAMD64=v3): ~40 ns → 6x سریع‌تر

با AVX-512 (GOAMD64=v4): ~20 ns → 12x سریع‌تر

🎯 کجاها مهمه؟
 پردازش تصویر و ویدیو
یادگیری ماشین (ضرب ماتریس)
رمزنگاری (AES, SHA)
پردازش صوت
بازی‌سازی (physics, graphics)
داده‌های علمی و عددی
جستجو در آرایه‌های بزرگ

منطق معمولی برنامه
کار با string ها (عموماً)
I/O و شبکه

💡 نکته عملی برای Go
# ببین کامپایلر از vector استفاده کرد یا نه:

go build -gcflags="-S" . 2>&1 | grep -i "VMOV\|VADD\|VPCMP"

# کامپایل برای CPU فعلیت (بیشترین بهینه‌سازی):

GOAMD64=v3 go build .

# تست اینکه CPU ات چی ساپورت می‌کنه:

grep -m1 flags /proc/cpuinfo | tr ' ' '\n' | grep -E "avx|sse"
3👍1🔥1
🔰 آموزش کامل دستورات go env

🎖 قسمت اول — CGO و ارتباط Go با C
👑https://xn--r1a.website/gopher_academy/5137

🎖قسمت دوم — کامپایلرها، معماری و سیستم‌عامل
👑 https://xn--r1a.website/gopher_academy/5138

🎖 قسمت سوم — مسیرها و مدیریت ماژول ها
👑 https://xn--r1a.website/gopher_academy/5139

🎖قسمت چهارم — پروکسی، امنیت و تنظیمات Runtime
👑 https://xn--r1a.website/gopher_academy/5140
👍1
اصلا این فلگ ها -02 -g چی هستن و ایا فلگ های دیگری هم داریم؟👇
CGO_CFLAGS='-O2 -g'
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'


@gopher_academy
1
🚀 فلگ‌های بهینه‌سازی -O

به GCC می‌گی چقدر و چطور کد رو بهینه کنه. هرچی بهینه‌سازی بیشتر، کامپایل کندتر ولی اجرا سریع‌تر.

@gopher_academy
🔥2
🐛 فلگ‌های Debug یعنی -g

به کامپایلر می‌گی چه اطلاعاتی برای debugger ذخیره کنه.

@gopher_academy
1
🔵 عنوان مقاله
Adding Go to a Browser Code Runner

🟢 خلاصه مقاله:
در این مقاله، به بررسی نحوه افزودن زبان برنامه‌نویسی Go به یک محیط اجرای کد در مرورگر پرداخته شده است. معمولاً برای اجرا کردن کدهای Go در محیط‌های مختلف، از تنظیمات خاصی بهره گرفته می‌شود که یکی از معمول‌ترین روش‌ها، تغییر متغیر محیطی `GOOS=js` است. اما در این مورد خاص، وقتی تلاش شد آن را در یک محیط جداشده (ایزوله) مبتنی بر موتور V8 اجرا کنیم، این روش کارایی نداشت. مشکل اصلی این بود که تنظیمات معمول برای اجرای کدهای Go در بستر جاوااسکریپت در این حالت، نتوانستند انتظارات را برآورده کنند.

در ادامه، با نگاهی به راه‌حل‌های جایگزین، متوجه شدیم که کامپایل کردن مفسر Yaegi، که یک مفسر بومی زبان Go است، به فرمت WASI (WebAssembly System Interface)، موفقیت‌آمیزتر عمل می‌کند. این فرآیند اجازه داد تا مفسر با پشتیبانی کامل از استانداردهای مورد نیاز، بتواند در محیط‌های مختلف اجرا شود و بدون مشکل، کدهای Go را در مرورگر بارگذاری و اجرا کند. نتیجه نهایی، اجرای بی‌نقص و تمیز این راهکار بود که امکان توسعه و آزمایش سریع زبان Go در بستر وب را فراهم کرد.

در نهایت، این تجربه نشان می‌دهد که با نوآوری و استفاده از فناوری‌های جدید مانند WebAssembly و WASI، می‌توان محدودیت‌های سنتی را دور زد و تجربه‌ای کاربرپسند و قدرتمند در محیط مرورگر فراهم آورد.

#برنامه‌نویسی #وب_توسعه #WebAssembly #Go

🟣لینک مقاله:
https://blog.lvmbdv.dev/posts/adding-go-to-a-browser-code-runner/


👑 @gopher_academy
🔥3
🔵 عنوان مقاله
Supervised Fire-and-Forget Tasks in Go

🟢 خلاصه مقاله:
در برنامه‌نویسی، اجرای وظایف به صورت «آتش‌بس» یا همان «fire-and-forget» یکی از نیازهای رایج است که در آن، برنامه‌نویس قصد دارد یک وظیفه را شروع کند و بلافاصله بدون نیاز به انتظار برای تکمیل آن، روند اجرای برنامه را ادامه دهد. اما، اجرای این نوع وظایف به صورت سهل‌انگارانه و تنها با فراخوانی مستقیم تابع در قالب `go func()`، مشکلاتی مانند مدیریت همزمانی، برخورد با خطاها و خاموشی کنترل‌شده را در پی دارد.

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

در این مقاله، به نحوه اجرای وظایف «آتش‌بس» در زبان برنامه‌نویسی Go می‌پردازیم، به گونه‌ای که نه تنها محدودیت‌های همزمانی به صورت مؤثر رعایت شوند، بلکه خطاهای ناگهانی به درستی مدیریت شوند و امکان خاموش کردن مطمئن برنامه فراهم گردد. این روش، جایگزینی هوشمندانه برای فراخوانی ساده `go func()` است و تضمین می‌کند که برنامه‌های ما در مقابل خطاها مقاوم‌تر و مدیریت آن‌ها آسان‌تر است.

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

#برنامه‌نویسی #Go #مدیریتوظایف #کدآرام

🟣لینک مقاله:
https://rednafi.com/go/supervised-fire-and-forget/


👑 @gopher_academy
Forwarded from AI
💢مدل Opus 5 به‌اشتباه کل پوشه پروفایل یک توسعه‌دهنده را هنگام پشتیبان‌گیری حذف کرد

▫️ یک توسعه‌دهنده گزارش داده که Claude Opus 5 هنگام تهیه نسخه پشتیبان، به‌اشتباه با اجرای دستور rm -rf کل پوشه پروفایل او را پاک کرده و سپس فقط نوشته است: «ببخشید، اشتباه تایپی رخ داد.» این اتفاق بار دیگر اهمیت محدود کردن دسترسی ابزارهای هوش مصنوعی به سیستم‌های حساس را نشان می‌دهد.
👍2🍾2
🔵 عنوان مقاله
Watching Go's New Garbage Collector Move Through the Heap

🟢 خلاصه مقاله:
در نسخه ۱.۲۶ زبان برنامه‌نویسی Go، جمع‌آوری زباله (Garbage Collector) جدید این زبان به عنوان گزینه پیش‌فرض معرفی شد. این تغییر، گامی مهم در بهبود کارایی و مدیریت حافظه در برنامه‌های نوشته شده با Go بود. توسعه‌دهندگان این زبان با هدف افزایش سرعت و کاهش مصرف منابع، این سیستم جمع‌آوری زباله جدید را طراحی کردند تا فرآیند مدیریت حافظه به طور مؤثرتری انجام شود.

در این مقاله، نگاهی داریم به نحوه عملکرد این جمع‌آوری زباله جدید در محیط‌های واقعی و چگونه می‌توان با ابزارهای مختلف، روند حرکت آن در ساختارهای حافظه را زیر نظر گرفت. به کمک ابزارهای پروفایلینگ و نقشه‌های ASCII، می‌توان تصویر دقیقی از نحوه عبور گاربیج کالکتور در طول هیپ (Heap) و تاثیر آن بر عملکرد برنامه‌ها بدست آورد. این فرآیند، برای توسعه‌دهندگان اهمیت زیادی دارد؛ چرا که درک بهتر رفتار این سیستم، کمک می‌کند تا برنامه‌هایی بهینه‌تر و سریع‌تر بسازند و مشکلات حافظه را زودتر شناسایی کنند.

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

#برنامه‌نویسی #حافظه #GoLang #توسعه‌دهندگی

🟣لینک مقاله:
https://theconsensus.dev/p/2026/07/19/observing-gos-garbage-collector-old-and-new.html


👑 @gopher_academy
1
🔵 عنوان مقاله
Goph 2.0: A Native Go SSH Client Library

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

در نسخه ۲، امکانات جدید و بهبودهای قابل توجهی اضافه شده است. یکی از این ویژگی‌ها، API مبتنی بر گزینه‌های تابع است که کار با تنظیمات مختلف را ساده‌تر و سریع‌تر می‌کند. همچنین، دستورات آگاه از زمینه (context-aware) امکان مدیریت بهتر عملیات‌ را فراهم می‌آورد، به‌خصوص در برنامه‌هایی که نیازمند کنترل دقیق زمان‌بندی و مدیریت خطا هستند. از دیگر قابلیت‌های مهم نسخه جدید، پشتیبانی از پراکسی SOCKS5 و مسیرهای پرش (jump hosts) است که مسیرهای اتصال پیچیده و امن را فراهم می‌سازد و به توسعه‌دهندگان کمک می‌کند در شبکه‌های پیچیده‌تر به راحتی کار کنند.

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

#برنامه‌نویسی #امنیت #SSH #Go

🟣لینک مقاله:
https://github.com/melbahja/goph


👑 @gopher_academy