Gopher Academy
3.87K subscribers
927 photos
40 videos
280 files
2.09K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
Gopher Academy
مشکل "mutex copying" در Go یعنی کپی کردن یک mutex به جای استفاده از pointer به آن. این کار باعث می‌شه که mutex اصلی و کپی شده دو شیء جداگانه بشن و قفل‌گذاری درست کار نکنه. چرا مشکل ساز است؟ وقتی یک mutex رو کپی می‌کنی، حالت داخلی اش (locked/unlocked) کپی…
❤️نمونه اشتباه
package main

import (
"fmt"
"sync"
"time"
)

type Counter struct {
mu sync.Mutex
value int
}

func (c Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.value++
fmt.Printf("Value: %d\n", c.value)
}
func badFunction(c Counter) {
c.mu.Lock()
defer c.mu.Unlock()
c.value = 100
}

func main() {
counter := Counter{}

for i := 0; i < 5; i++ {
go counter.Increment()
}

go badFunction(counter)

time.Sleep(time.Second)
fmt.Printf("Final value: %d\n", counter.value)
}
1
Forwarded from VIP
🚀 به دنیای توسعه و تکنولوژی خوش اومدی!

اگر به موضوعات زیر علاقه‌مندی:

🔹 Golang
🔹 Linux & DevOps
🔹 Software Engineering
🔹 AI & Machine Learning
🔹 فرصت‌های شغلی ریموت (خارجی و داخلی)

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

📌 از این لینک همه چنل‌هامونو یه‌جا ببین و جوین شو:

👉 https://t.iss.one/addlist/AJ7rh2IzIh02NTI0
5
📢 اگر تلگرام پرمیوم دارید، کانال ما رو Boost کنید ! 🚀

با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙

https://t.iss.one/boost/gopher_academy
1
Forwarded from Software Engineer Labdon
این کتاب خیلی ساده و روان توضیح میده چرا Rust اینقدر سر و صدا کرده و چرا خیلی‌ها دارن سمتش میرن:

نشون میده چطوری با سیستم ownership و borrowing میشه حافظه رو بدون دردسر مدیریت کرد

توضیح میده چرا توی Rust باگ‌هایی مثل null pointer یا data race کلاً از همون اول جلوی راهت سبز نمی‌شن

یاد میده چطوری میشه به راحتی برنامه‌های چندنخی و امن نوشت، بدون استرس خطاهای عجیب غریب

تأکید می‌کنه که همه‌ی این امکانات رو می‌گیری، ولی سرعتش در حد C/C++ باقی می‌مونه
66👍1
Gopher Academy
📌 Memory Allocation in Go ❌️این پست اپدیت می‌شود ❌️ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…
📌 Span and Size Class in Go

🔹 یکی از مفاهیم کلیدی در مدیریت حافظه گو Span است.

🧩 Span

* یک Span شامل یک یا چند Page متوالی است.
* هر Span به چند شیء هم‌سایز تقسیم می‌شود.
* این کار باعث می‌شود Go از استراتژی segregated fit allocation استفاده کند:

* تخصیص بهینه برای اندازه‌های مختلف
* کاهش fragmentation (تکه‌تکه شدن حافظه)

🔸 اطلاعات هر Span در یک ساختار به نام mspan ذخیره می‌شود:

* آدرس شروع اولین Page
* تعداد Pageها
* تعداد اشیاء تخصیص‌یافته
* و سایر متادیتا

📦 Size Class

ا * Go سایز اشیاء را در گروه‌هایی به نام Size Class تقسیم‌بندی می‌کند.
* هر Span دقیقاً به یک Size Class تعلق دارد.
ا * Go در مجموع ۶۸ Size Class تعریف کرده است:

ا * Class 0 → برای اشیاء بزرگ‌تر از 32KB
ا * Class 1 تا 67 → برای اشیاء کوچک و خیلی کوچک

به زبان ساده:
ا Go با تقسیم حافظه به Span و گروه‌بندی آن‌ها در Size Class**، تخصیص حافظه را سریع و بهینه نگه می‌دارد.


👑 @gopher_academy
🤝11
Gopher Academy
📌 Memory Allocation in Go ❌️این پست اپدیت می‌شود ❌️ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…
📌 Two spans with different size classes

🔹 هر Span در Go به یک Size Class خاص تعلق دارد. این Size Class مشخص می‌کند که:

* چند Page در Span قرار بگیرد
* هر Page چند Object را در خود جای دهد

📦 مثال‌ها (تصویر بالا):

ا 1. Size Class 38

* اندازه هر شیء: 2048B
* یک Page (۸KB) دقیقاً ۴ تا شیء 2048B را جا می‌دهد.
* پس کل Span = ۱ Page + ۸ Object

ا 2. Size Class 55

* اندازه هر شیء: 10880B
* هر شیء بزرگ‌تر از یک Page است.
* Span در اینجا روی ۴ Page گسترده می‌شود و ۳ Object را نگه می‌دارد.

🧩 Tail Waste (هدررفت انتهایی)

* دلیل اینکه برای Size Class 55 از ۴ Page استفاده می‌شود و نه ۲ Page، کاهش هدررفت حافظه است.
* اگر ۲ Page می‌گرفت → هدررفت = 5504B
* اگر ۴ Page بگیرد → هدررفت = 128B
* پس با استفاده از صفحات بیشتر، fragmentation به حداقل می‌رسد.


به زبان ساده:
ا Go با استفاده از Span Class و محاسبه‌ی دقیق Tail Waste**، حافظه را به شکل بهینه تخصیص می‌دهد و از هدررفت جلوگیری می‌کند.


👑 @gopher_academy
🏆11
Gopher Academy
📌 Memory Allocation in Go ❌️این پست اپدیت می‌شود ❌️ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…
📌 Tail waste in span


🔹 هر Span ممکنه مقداری فضای استفاده‌نشده در انتهای خودش داشته باشه، به این فضا می‌گن Tail Waste.

* مثال (تصویر بالا):

* اگر Span با ۲ Page ساخته بشه → Tail Waste = 5504B
* اگر Span با ۴ Page ساخته بشه → Tail Waste = 128B
پس Go برای کاهش هدررفت، از ۴ Page استفاده می‌کنه.

🧩 چرا فقط 67 Size Class داریم؟

برنامه‌ی Go می‌تونه آبجکت‌هایی با سایزهای مختلف بخواد، اما Go فقط 67 Size Class برای آبجکت‌های کوچک تعریف کرده.

📍 سوال: اگه ما آبجکت 300B بخوایم که دقیقاً تو جدول Size Classes نیست، چی می‌شه؟

* Go سایز رو Round Up می‌کنه به نزدیک‌ترین Size Class بزرگ‌تر.
* اینجا 300B → می‌شه 320B

🔑 نکته مهم:
اون چیزی که ما در تصویر به‌عنوان "Object" می‌بینیم، دقیقاً آبجکت برنامه نیست، بلکه یک Size Class Object هست که توسط Runtime مدیریت می‌شه.

به زبان ساده:

*ا Go با Tail Waste Optimization جلوی هدررفت زیاد رو می‌گیره.
* با Size Class Rounding هم حافظه رو سریع‌تر و ساده‌تر مدیریت می‌کنه.

👑 @gopher_academy
🔥11
Gopher Academy
📌 Memory Allocation in Go ❌️این پست اپدیت می‌شود ❌️ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…
📌User objects and size class objects


🔹 در Go، آبجکت‌های واقعی برنامه (User Objects) داخل آبجکت‌های مربوط به Size Class قرار می‌گیرن.

* سایز User Object معمولاً از Size Class Object کوچیک‌تره → همین اختلاف باعث Waste می‌شه.
* علاوه بر اون، در انتهای Span هم یه بخشی از حافظه استفاده‌نشده باقی می‌مونه (Tail Waste).
* مجموع این دو نوع هدررفت = Total Waste.

🧩 مثال (Size Class 55):

* هر Size Class Object = 10880B
* 3 تا User Object (هرکدوم 10241B) توی Span جا می‌گیرن.
* Waste ناشی از اختلاف سایز: 1917B
* Tail Waste: 128B
* Total Waste = 1917 + 128 = 2045B6.24% کل Span

🔑 نتیجه:
حتی با وجود Segregated Fit Strategy که هدفش کاهش Fragmentation هست، باز هم کمی هدررفت اجتناب‌ناپذیر وجود داره.

👑 @gopher_academy
1🔥1
🎙️ عنوان پادکست:
🛠️ Can we fix it? No we can't! 🧭 Plus, exclusive behind-the-scenes look at Go West Conf.
خلاصه پادکست:
این شماره با نگاهی طنزآمیز به «Can we fix it? No we can't!» به بحث‌های روز دنیای Go می‌پردازد و پشت‌صحنه‌ای از Go West Conf را هم روایت می‌کند. در بخش ابزارها، نسخه v0.48.0 از vscode-go با پشتیبانی از golangci-lint v2 منتشر شده و در کنار آن یک معرفی تخصصی و گفت‌وگو با Ldez در قسمت 104 ارائه شده است. گزارش یک باگ در LookPath درباره گسترش نادرست "" و "." در برخی تنظیمات PATH و همچنین پیشنهادی برای حذف کامل قابلیت‌های cmd/fix مطرح شده است....
2🐳1👨‍💻1
🔵 عنوان مقاله
Flight Recorder in Go 1.25

🟢 خلاصه مقاله:
Flight Recorder در Go 1.25 ابزاری تشخیصی است که به‌صورت پیوسته ردیابی اجرای برنامه را ضبط می‌کند و چند ثانیه‌ی اخیر را در یک بافر چرخشی نگه می‌دارد. مزیت اصلی این است که پس از وقوع مشکل، می‌توان همان پنجره زمانیِ مرتبط را ذخیره و تحلیل کرد، بدون نیاز به فعال‌بودنِ دائمیِ ردیابی سنگین. این قابلیت برای عیب‌یابی مسائل گذرا در محیط production—مثل افزایش مقطعی تاخیر، بن‌بست‌ها، رقابت بر سر قفل‌ها یا تعاملات GC—با سربار کم مفید است و زمان رسیدن به ریشه مشکل را کاهش می‌دهد. همچنین می‌توان بخش ضبط‌شده را صادر کرد و در ابزارهای آشنای ردیابی Go بررسی نمود تا اتفاقات منتهی به رخداد به‌روشنی دیده شود.

#Go #Go125 #FlightRecorder #Tracing #Diagnostics #Observability #ProductionDebugging #Profiling

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


👑 @gopher_academy
👍1
🔵 عنوان مقاله
PegoMock 4.3: A Powerful Yet Simple Mocking Framework

🟢 خلاصه مقاله:
**PegoMock 4.3 یک فریمورک mocking ساده اما قدرتمند است که با یک DSL خوانا نوشتن، خواندن و نگه‌داری تست‌ها را آسان می‌کند. هسته اصلی آن، زبانی است که به‌جای کدهای طولانی، نیت تست را شفاف بیان می‌کند. این ابزار از stubbing و argument matching پشتیبانی می‌کند؛ یعنی می‌توانید رفتار وابستگی‌های شبیه‌سازی‌شده را تعریف کنید و بر اساس الگوهای ورودی، انتظارها را دقیق و انعطاف‌پذیر تنظیم کنید. نتیجه، تست‌هایی شفاف، کم‌بوایلرپلیت و قابل اتکا برای تیم‌هاست.

#Testing #Mocking #DSL #UnitTesting #Stubbing #ArgumentMatching #TestAutomation

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


👑 @gopher_academy
👍1
Forwarded from Software Engineer Labdon
کامپیوترها برای نگهداری و نمایش کاراکترهای یک متن از یه فضای یک بایتی (معادل هشت بیت 0 یا 1) استفاده میکردن
این میزان فضا توی کامپیوتر میتونه شامل 255 حالت مختلف بشه
کامپیوترها برای نشانه‌های گرامری، حروف انگلیسی و عدد از استاندارد اسکی (ASCII) استفاده میکردن
این استاندارد آمریکایی میاد برای هر کاراکتر یه معادل عددی تعریف میکنه
مثلا کاراکتر A در اسکی معادل عدد 65هست
قرار گرفتن این اعداد پشت سر هم در کامپیوتر یک متن رو میسازه

مشابه این استاندارد معادل عددی برای پشتیبانی از تمام زبان‌های دنیا به وجود اومد که یونیکد (Unicode) نام داره
کاراکترهای انگلیسی و اعداد انگلیسی توی یونیکد از همون اعداد استاندارد اسکی استفاده میکنن و در ادامه پشتیبانی از کاراکترهای بقیه زبان‌های دنیا بهش اضافه میشه

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

حالا شما برای نگهداری یک متن که شامل کاراکترهای
یونیکد هست نیاز دارین 3 بایت برای هر کاراکتر اختصاص بدین
کاراکترهای انگلیسی تو یونیکد تنها یک بایت هم براشون کافیه ولی اگه شما برای یه متن انگلیسی، هر کاراکتر رو سه بایت در نظر بگیرین عملا به ازای هر کاراکتر انگلیسی دو بایت فضا رو هدر دادین
مثلا تو یه متن با ده هزار کاراکتر،
یه چیزی حدود 20 کیلوبایت فضای کامپیوتر رو هدر دادین
چه وقتی میخاین ازش استفاده کنین و توی رم هست و چه وقتی که روی هارد دیسک برای استفاده در آینده ذخیره شده

اینجاست که UTF-8 میتونه کمک کنه

این استاندارد که توسط یونیکد تعریف شده به جای اینکه بیاد فضای 3 بایتی به هر کاراکتر
اختصاص بده، میاد از 7 بیت راست یک بایت برای کاراکترهای اسکی استفاده میکنه

و برای کاراکترهای بعدی علاوه بر خود کاراکتر، تعداد بایت مصرف شده برای اون کاراکتر هم داخل بایت اول ذخیره میکنه
یعنی 128 کاراکتر اول اسکی به شکل عادی ذخیره میشن بدون تغییر خاصی با فقط یک بایت فضا

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

این میزان فضا از یک بایت تا چهاربایت میتونه متغیر باشه

حالا چه شکلی اینکارو میکنه
تو یه بایت برای 128 عدد اولیه اسکی، بیت چپ همیشه صفر هست

اما وقتی بیت چپ یک میشه یعنی با یه کاراکتر UTF8 طرف هستیم

همونطور که گفتم هر کاراکتر توی UTF-8 میتونه از یک بایت تا چهاربایت متغیر باشه

کامپیوتر چطور اینو تشخیص میده؟

بیت‌های 1 اولِ بایت رو میشماره تا به عدد 0 صفر برسه
یعنی اگه بایت اول با عدد باینری 110 شروع بشه، یعنی دوبایت فضا استفاده شده
اگه 1110 باشه سه بایت و ...

تو UTF-8 فضای بیت‌های بایت اول بین خود کاراکتر و تعداد بایت تقسیم میشه و متغیره

اما تو بایت‌های دوم و سوم و چهارم همیشه شش تا بیت راست برای خود کاراکتر استفاده میشه و دو بیت دیگه برای هندل کردن ارور تو utf-8 استفاده میشه
امیدوارم تونسته باشم با دانش ناقص خودم شما رو در مورد این انکدینگ رایج دنیای کامپیوتر آشنا کرده باشم

توضیحات دقیق‌تر:
https://en.wikipedia.org/wiki/UTF-8

سایت استفاده شده برای تست بایت UTF-8:
https://utf8-playground.netlify.app/


| <Amir/>
👍2🍾1
🔵 عنوان مقاله
Failsafe: Fault Tolerance, Resilience Patterns & Policies

🟢 خلاصه مقاله:
Failsafe یک کتابخانه برای ساخت اپلیکیشن‌های fault-tolerant است که به شما امکان می‌دهد کدهای حساس را با مجموعه‌ای از سیاست‌های تاب‌آور مانند Retry، CircuitBreaker، RateLimiter، Timeout و Fallback بپوشانید. این سیاست‌ها قابل ترکیب‌اند و بدون تغییر منطق کسب‌وکار، حفاظت‌های چندلایه ایجاد می‌کنند.

در نسخه‌های اخیر، دو قابلیت کلیدی اضافه شده است: نخست، usage tracking برای اعمال عدالت و جلوگیری از اثر “noisy neighbor” از طریق پایش مصرف و اجرای محدودیت‌ها یا سهمیه‌ها. دوم، execution budgets برای تعیین سقف کلی هزینه اعمال تاب‌آوری—مثل مجموع retries یا hedges—در سطح یک فراخوانی، جریان کاری یا کل سیستم. این بودجه‌ها مانع از افراط در بازیابی می‌شوند و تعادلی بین نرخ موفقیت، تأخیر، هزینه و SLOها برقرار می‌کنند.

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

#FaultTolerance #Resilience #Failsafe #Retry #CircuitBreaker #RateLimiter #Timeout #Fallback

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


👑 @gopher_academy
1
Forwarded from Bardia & Erfan
پاول دورُف: حاضرَم بمیرم، ولی آزادی و امنیت کاربران رو نفروشم!

در گفت‌وگوی عمیق با «لِکس فریدمن»، بنیان‌گذار تلگرام از فلسفهٔ زندگی، حریم خصوصی، بیت‌کوین و مقاومتش در برابر فشار دولت‌ها گفت.
> 🗣
«من ترجیح می‌دم بمیرم و تمام داراییم رو از دست بدهم تا اینکه اطلاعات کاربران رو به هر دولتی تحویل بدم.
آزادی و امنیت داده‌ها، خط قرمز من و تلگرامه.»

🔒

او تأکید کرد تلگرام هیچ‌وقت “در پشتی” برای دولت‌ها باز نکرده و در برابر فشار روسیه و ایران برای دسترسی به اطلاعات یا سانسور مقاومت کرده است.
>
«در روسیه و ایران بارها تلاش شد ما رو مجبور به همکاری کنن. ولی ما مقاومت کردیم چون اگر یک‌بار کوتاه بیای، دیگه آزادی واقعی وجود نداره.»



📱 ۷ اصل فکری و مدیریتی پاول دورُف (بر اساس مصاحبه):

1️⃣ آزادی و اخلاق بالاتر از هر سود مالی — او می‌گوید حاضر است تمام دارایی‌اش را از دست بدهد تا آزادی بیان و امنیت کاربران حفظ شود.

2️⃣ مینیمالیسم و انضباط شخصی — سبک زندگی‌اش ساده، بدون الکل، قهوه یا حواس‌پرتی است؛ تمرکز کامل روی مأموریت و نظم ذهنی.

3️⃣ تیم کوچک، تأثیر بزرگ — معتقد است تیم‌های بزرگ بهره‌وری را می‌کُشند؛ موفقیت تلگرام حاصل اعتماد به چند نابغهٔ منضبط است.

4️⃣ مقاومت در برابر سانسور و در پشتی — هیچ دولت یا شرکتی حق کنترل یا شنود تلگرام را ندارد. رمزنگاری و طراحی MTProto را «دیوار آزادی دیجیتال» می‌نامد.

5️⃣ پول و قدرت ابزارند، نه هدف — او از مدل‌های انحصاری و کمیسیون‌های اپل و گوگل انتقاد می‌کند و تأکید دارد که ثروت نباید آزادی را محدود کند.

6️⃣ باور به فناوری آزاد مثل بیت‌کوین — بیت‌کوین را «نمادِ کاهش نیاز به اعتماد به واسطه‌ها و آزادی مالی» می‌داند؛ از پروژه TON به‌عنوان زیربنای اقتصاد آزاد تلگرام یاد می‌کند.

7️⃣ نگاه فلسفی به زندگی و مرگ — از کافکا، شوپنهاور و «جاودانگی کوانتومی» می‌گوید؛ باور دارد انسان باید بدون ترس از مرگ، بر پایهٔ ارزش‌های خودش زندگی کند.
64👍2🐳2🍾1💋1