شرکت اوبر یکی شرکت های بزرگه که از زبان گو استفاده میکنه، اینجا میتونید کد استایلی که با زبان گو میزنن رو ببینید نسخه ترجمه شده به فارسی هم داره ولی یکم دیر تر از نسخه اصلیش آپدیت میشه
https://github.com/uber-go/guide
<Nimo/>
https://github.com/uber-go/guide
<Nimo/>
GitHub
GitHub - uber-go/guide: The Uber Go Style Guide.
The Uber Go Style Guide. Contribute to uber-go/guide development by creating an account on GitHub.
🔥6❤1
🔵 عنوان مقاله
that runs on the Erlang VM.
🟢 خلاصه مقاله:
این مقاله در Golang Weekly به معرفی فناوریای میپردازد که روی Erlang VM اجرا میشود و برای برنامهنویسان Go اهمیت دارد. مقاله مزیتهای کلیدی Erlang VM مانند فرایندهای سبک، پیامرسانی و تحمل خطا را توضیح میدهد و آنها را با مدل goroutine و channel در Go مقایسه میکند. سپس پیامدهای عملی این تفاوتها را بر مقیاسپذیری، تابآوری و تأخیر در سیستمهای توزیعشده، همراه با ملاحظات استقرار، همپیوندی و مشاهدهپذیری، مرور میکند. جمعبندی مقاله این است که استفاده از فناوریهای مبتنی بر Erlang VM میتواند برای تیمهای Go که به دسترسپذیری بالا نیاز دارند، مکملی ارزشمند باشد؛ انتخاب نهایی به نیازهای مسئله و تجربه تیم وابسته است.
#ErlangVM #Go #GolangWeekly #Concurrency #DistributedSystems #FaultTolerance #Scalability
🟣لینک مقاله:
https://golangweekly.com/link/175356/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
that runs on the Erlang VM.
🟢 خلاصه مقاله:
این مقاله در Golang Weekly به معرفی فناوریای میپردازد که روی Erlang VM اجرا میشود و برای برنامهنویسان Go اهمیت دارد. مقاله مزیتهای کلیدی Erlang VM مانند فرایندهای سبک، پیامرسانی و تحمل خطا را توضیح میدهد و آنها را با مدل goroutine و channel در Go مقایسه میکند. سپس پیامدهای عملی این تفاوتها را بر مقیاسپذیری، تابآوری و تأخیر در سیستمهای توزیعشده، همراه با ملاحظات استقرار، همپیوندی و مشاهدهپذیری، مرور میکند. جمعبندی مقاله این است که استفاده از فناوریهای مبتنی بر Erlang VM میتواند برای تیمهای Go که به دسترسپذیری بالا نیاز دارند، مکملی ارزشمند باشد؛ انتخاب نهایی به نیازهای مسئله و تجربه تیم وابسته است.
#ErlangVM #Go #GolangWeekly #Concurrency #DistributedSystems #FaultTolerance #Scalability
🟣لینک مقاله:
https://golangweekly.com/link/175356/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
gleam.run
Gleam programming language
Discover a friendly language for scalable, type-safe systems. Gleam comes with compiler, build tool, formatter, editor integrations, and package manager all built in.
❤1👍1
Forwarded from Software Engineer Labdon
میدونستید میتونید 0 های آیپی رو ننویسید و کار کنه؟؟؟
خب حالا سیستم از کجا میفهمه چطوری؟
بر اساس این که شما چند بخش رو نوشتید کار میکنه:
a.b.c.d -> یه آیپی معمولی
a.b.c -> a.b.0.c
a.b -> a.0.0.b
a -> 0.0.0.a
پس وقتی بنویسید 10.22.2 میشه 10.22.0.2
یا اگر بنویسید 127.1 میشه 127.0.0.1
یعنی سیستم قسمتهای جا افتاده رو از چپ با صفر پر میکنه.
خب حالا سیستم از کجا میفهمه چطوری؟
بر اساس این که شما چند بخش رو نوشتید کار میکنه:
a.b.c.d -> یه آیپی معمولی
a.b.c -> a.b.0.c
a.b -> a.0.0.b
a -> 0.0.0.a
پس وقتی بنویسید 10.22.2 میشه 10.22.0.2
یا اگر بنویسید 127.1 میشه 127.0.0.1
یعنی سیستم قسمتهای جا افتاده رو از چپ با صفر پر میکنه.
👍11👨💻2
⚙️ مکانیزم گسترش ظرفیت (
وقتی یه slice در Go پر میشه و شما با
Go متوجه میشه که ظرفیت (capacity) فعلی کافـی نیست و باید حافظهی بیشتری اختصاص بده.
به این فرآیند میگن slice growth یا reallocation.
🧠 مرحلهبهمرحله چه اتفاقی میافته؟
فرض کن داریم:
الان:
*
*
حالا اگر بنویسی:
Go متوجه میشه که ظرفیت فعلی (۳) پر شده.
در نتیجه:
1. یه بافر جدید در حافظه ایجاد میکنه (یه آرایهی جدید با ظرفیت بزرگتر)
2. تمام عناصر قبلی (
3. عنصر جدید رو اضافه میکنه
4. و یه slice جدید که به آرایهی جدید اشاره میکنه، برمیگردونه
📈 حالا ظرفیت چقدر زیاد میشه؟
Go از یه الگوریتم رشد پویا (dynamic growth algorithm) استفاده میکنه.
الگو بهصورت تقریبی اینطوریه:
✅ تا ظرفیتهای کوچک:
وقتی
ظرفیت معمولاً ۲ برابر میشه.
مثلاً:
✅ وقتی ظرفیت بزرگ شد (≥ 1024):
Go رشد رو آهستهتر میکنه تا حافظه هدر نره.
تقریباً ظرفیت جدید ≈ ظرفیت فعلی × 1.25 (یعنی حدود 25٪ افزایش).
مثلاً:
🔬 مکانیزم دقیق در سورسکد Go
در پیادهسازی داخلی زبان Go (در
این تابع دقیقاً تصمیم میگیره:
* ظرفیت جدید چقدر باشه
* حافظه جدید کجا اختصاص پیدا کنه
* چطور دادههای قبلی کپی بشن
📌 بخشی از منطق اون (بهصورت سادهشده) اینطوریه:
---
🧩 نتیجه:
*
*
* حافظهی قبلی ممکنه توسط garbage collector آزاد بشه اگه دیگه بهش اشارهای نباشه.
---
📊 مثال برای درک تغییر ظرفیت:
📤 خروجی معمولی:
میبینی چطوری ظرفیت به شکل ۲ برابر رشد میکنه.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
cap
) در Sliceوقتی یه slice در Go پر میشه و شما با
append()
عنصر جدیدی بهش اضافه میکنی،Go متوجه میشه که ظرفیت (capacity) فعلی کافـی نیست و باید حافظهی بیشتری اختصاص بده.
به این فرآیند میگن slice growth یا reallocation.
🧠 مرحلهبهمرحله چه اتفاقی میافته؟
فرض کن داریم:
s := make([]int, 3, 3)
الان:
*
len(s) = 3
*
cap(s) = 3
حالا اگر بنویسی:
s = append(s, 10)
Go متوجه میشه که ظرفیت فعلی (۳) پر شده.
در نتیجه:
1. یه بافر جدید در حافظه ایجاد میکنه (یه آرایهی جدید با ظرفیت بزرگتر)
2. تمام عناصر قبلی (
10, 20, 30
) رو به آرایهی جدید کپی میکنه3. عنصر جدید رو اضافه میکنه
4. و یه slice جدید که به آرایهی جدید اشاره میکنه، برمیگردونه
📈 حالا ظرفیت چقدر زیاد میشه؟
Go از یه الگوریتم رشد پویا (dynamic growth algorithm) استفاده میکنه.
الگو بهصورت تقریبی اینطوریه:
✅ تا ظرفیتهای کوچک:
وقتی
cap
کوچیکه (مثلاً زیر 1024)،ظرفیت معمولاً ۲ برابر میشه.
مثلاً:
cap: 1 → 2 → 4 → 8 → 16 → 32 → ...
✅ وقتی ظرفیت بزرگ شد (≥ 1024):
Go رشد رو آهستهتر میکنه تا حافظه هدر نره.
تقریباً ظرفیت جدید ≈ ظرفیت فعلی × 1.25 (یعنی حدود 25٪ افزایش).
مثلاً:
cap: 1024 → 1280 → 1600 → 2000 → ...
🔬 مکانیزم دقیق در سورسکد Go
در پیادهسازی داخلی زبان Go (در
runtime/slice.go
)، تابعی وجود داره به نام:growslice(et *_type, old slice, cap int) slice
این تابع دقیقاً تصمیم میگیره:
* ظرفیت جدید چقدر باشه
* حافظه جدید کجا اختصاص پیدا کنه
* چطور دادههای قبلی کپی بشن
📌 بخشی از منطق اون (بهصورت سادهشده) اینطوریه:
newcap := old.cap
doublecap := newcap + newcap
if cap > doublecap {
newcap = cap
} else {
if old.cap < 1024 {
newcap = doublecap
} else {
for newcap < cap {
newcap += newcap / 4 // رشد 25 درصدی
}
}
}
---
🧩 نتیجه:
*
append()
در واقع یه slice جدید میسازه با آرایهی بزرگتر.*
cap
به شکل نمایی (expontential) رشد میکنه تا کارایی حفظ بشه.* حافظهی قبلی ممکنه توسط garbage collector آزاد بشه اگه دیگه بهش اشارهای نباشه.
---
📊 مثال برای درک تغییر ظرفیت:
s := []int{}
for i := 0; i < 10; i++ {
s = append(s, i)
fmt.Printf("len=%d cap=%d\n", len(s), cap(s))
}
📤 خروجی معمولی:
len=1 cap=1
len=2 cap=2
len=3 cap=4
len=4 cap=4
len=5 cap=8
len=6 cap=8
len=7 cap=8
len=8 cap=8
len=9 cap=16
len=10 cap=16
میبینی چطوری ظرفیت به شکل ۲ برابر رشد میکنه.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Gopher Academy
⚙️ مکانیزم گسترش ظرفیت (cap) در Slice وقتی یه slice در Go پر میشه و شما با append() عنصر جدیدی بهش اضافه میکنی، Go متوجه میشه که ظرفیت (capacity) فعلی کافـی نیست و باید حافظهی بیشتری اختصاص بده. به این فرآیند میگن slice growth یا reallocation. 🧠 مرحلهبهمرحله…
بریم دقیقتر سراغ الگوریتم رشد پویا (dynamic growth algorithm) توی Go — چون این یکی از طراحیهای خیلی هوشمندانهٔ Go برای مدیریت حافظه و performance هست.
⚙️ تعریف ساده:
وقتی یه slice داری و با
اگر ظرفیت (`cap`) پر شده باشه**، Go باید تصمیم بگیره **چقدر حافظهی جدید رزرو کنه.
الگوریتم رشد پویا دقیقاً وظیفهاش همینه:
> چطور ظرفیت جدید (
🧩 هدف الگوریتم رشد پویا:
Go میخواد بین دو چیز تعادل ایجاد کنه:
| هدف | توضیح |
| 🏎 سرعت بالا | با رشد نمایی (مثل ×2) تعداد دفعات تخصیص حافظه کم میشه.
| 💾 مصرف بهینه حافظه | با رشد تدریجی (مثل ×1.25) در ظرفیتهای بالا از هدر رفت RAM جلوگیری میشه.
🔍 منطق داخلی (بر اساس
الگوریتم در تابع داخلی Go به نام
خلاصهاش به این صورته:
📈 نتیجهی این منطق
| بازهٔ ظرفیت فعلی | نحوهٔ رشد | مثال
|
|
🧠 چرا این الگوریتم هوشمنده؟
1. در ظرفیتهای کوچک:
رشد دو برابری باعث میشه appendها سریعتر باشن (کمتر نیاز به کپی داده داریم).
یعنی
2. در ظرفیتهای بزرگ:
رشد کمتر باعث صرفهجویی در حافظه میشه چون کپیکردن چند مگابایت داده هزینهبره.
3. در مجموع:
الگوریتم به شکل پویا بسته به اندازهٔ فعلی slice تصمیم میگیره چطور رفتار کنه → بهینه برای performance و memory.
📊 مثال واقعی از رشد پویا:
📤 خروجی تقریبی:
میبینی که تا 1024 ظرفیت دو برابر میشه، بعدش رشدش 25٪ میره بالا. 🔥
📚 جمعبندی ساده
| ویژگی | توضیح
| نام الگوریتم | Dynamic Growth Algorithm
| هدف | افزایش ظرفیت slice بهشکل خودکار و بهینه
| تا 1024 | رشد دو برابری (exponential)
| بیش از 1024 | رشد حدود 25٪ در هر بار (incremental)
| مزیت | سرعت بالا + صرفهجویی در حافظه
| محل پیادهسازی |
➖➖➖➖➖➖➖➖
👑 @gopher_academy
⚙️ تعریف ساده:
وقتی یه slice داری و با
append()
دادهی جدید بهش اضافه میکنی،اگر ظرفیت (`cap`) پر شده باشه**، Go باید تصمیم بگیره **چقدر حافظهی جدید رزرو کنه.
الگوریتم رشد پویا دقیقاً وظیفهاش همینه:
> چطور ظرفیت جدید (
newCap
) محاسبه بشه، تا نه حافظه زیاد هدر بره، نه appendها کند بشن.🧩 هدف الگوریتم رشد پویا:
Go میخواد بین دو چیز تعادل ایجاد کنه:
| هدف | توضیح |
| 🏎 سرعت بالا | با رشد نمایی (مثل ×2) تعداد دفعات تخصیص حافظه کم میشه.
| 💾 مصرف بهینه حافظه | با رشد تدریجی (مثل ×1.25) در ظرفیتهای بالا از هدر رفت RAM جلوگیری میشه.
🔍 منطق داخلی (بر اساس
runtime/slice.go
)الگوریتم در تابع داخلی Go به نام
growslice()
پیادهسازی شده.خلاصهاش به این صورته:
func growslice(et *_type, old slice, cap int) slice {
newcap := old.cap
doublecap := newcap + newcap // ظرفیت دو برابر
if cap > doublecap {
newcap = cap
} else {
if old.cap < 1024 {
newcap = doublecap // برای ظرفیتهای کوچک: رشد ۲ برابری
} else {
// برای ظرفیتهای بزرگتر: رشد تدریجی (حدود 25٪)
for newcap < cap {
newcap += newcap / 4 // افزایش 25%
}
}
}
// در ادامه حافظه جدید اختصاص داده میشه و دادههای قبلی کپی میشن
}
📈 نتیجهی این منطق
| بازهٔ ظرفیت فعلی | نحوهٔ رشد | مثال
|
< 1024
| رشد نمایی (۲ برابر) | 64 → 128 → 256 → 512 → 1024 |
≥ 1024
| رشد خطی-تدریجی (۱.۲۵ برابر) | 1024 → 1280 → 1600 → 2000 → 2500 🧠 چرا این الگوریتم هوشمنده؟
1. در ظرفیتهای کوچک:
رشد دو برابری باعث میشه appendها سریعتر باشن (کمتر نیاز به کپی داده داریم).
یعنی
append
تقریباً در زمان amortized O(1) انجام میشه.2. در ظرفیتهای بزرگ:
رشد کمتر باعث صرفهجویی در حافظه میشه چون کپیکردن چند مگابایت داده هزینهبره.
3. در مجموع:
الگوریتم به شکل پویا بسته به اندازهٔ فعلی slice تصمیم میگیره چطور رفتار کنه → بهینه برای performance و memory.
📊 مثال واقعی از رشد پویا:
s := make([]int, 0)
for i := 0; i < 2000; i++ {
s = append(s, i)
if i%200 == 0 {
fmt.Printf("len=%d, cap=%d\n", len(s), cap(s))
}
}
📤 خروجی تقریبی:
len=0, cap=0
len=200, cap=256
len=400, cap=512
len=600, cap=1024
len=800, cap=1024
len=1000, cap=1280
len=1200, cap=1600
len=1400, cap=2000
len=1600, cap=2000
len=1800, cap=2500
len=2000, cap=2500
میبینی که تا 1024 ظرفیت دو برابر میشه، بعدش رشدش 25٪ میره بالا. 🔥
📚 جمعبندی ساده
| ویژگی | توضیح
| نام الگوریتم | Dynamic Growth Algorithm
| هدف | افزایش ظرفیت slice بهشکل خودکار و بهینه
| تا 1024 | رشد دو برابری (exponential)
| بیش از 1024 | رشد حدود 25٪ در هر بار (incremental)
| مزیت | سرعت بالا + صرفهجویی در حافظه
| محل پیادهسازی |
runtime/slice.go → growslice()
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍3
🎙️ عنوان پادکست:
The X/Tools Files
خلاصه پادکست:
در این شماره از The X/Tools Files اعلام شد که Go 1.25 منتشر شده و همزمان برخی پکیجهای عمومی در x/tools با Go 1.25.0 دچار خطای build میشوند؛ تیمها در حال رفع هستند و توصیه میشود فعلاً نسخهها را pin کنید و پیش از ارتقا در CI آزمایش کنید. همچنین مطلب «Building blocks for idiomatic Go pipelines» از Anton Zhiyanov معرفی شد که الگوهای عملی برای ساخت pipelineهای خوانا و کارآمد در Go ارائه میکند. در بخش رویدادها، زمان GopherCon USA برای 26 تا 28 آگوست در New York اعلام شد و در Lightning Round به ابزارهایی مثل outrig اشاره شد....
The X/Tools Files
خلاصه پادکست:
در این شماره از The X/Tools Files اعلام شد که Go 1.25 منتشر شده و همزمان برخی پکیجهای عمومی در x/tools با Go 1.25.0 دچار خطای build میشوند؛ تیمها در حال رفع هستند و توصیه میشود فعلاً نسخهها را pin کنید و پیش از ارتقا در CI آزمایش کنید. همچنین مطلب «Building blocks for idiomatic Go pipelines» از Anton Zhiyanov معرفی شد که الگوهای عملی برای ساخت pipelineهای خوانا و کارآمد در Go ارائه میکند. در بخش رویدادها، زمان GopherCon USA برای 26 تا 28 آگوست در New York اعلام شد و در Lightning Round به ابزارهایی مثل outrig اشاره شد....
Forwarded from AI Labdon
اگه برنامه نویس هستید و از هوش مصنوعی برای کدنویسی استفاده میکنید، واقعاً به خودتون لطف میکنید که OpenSpec رو چک کنید. این ابزار به شما کمک میکنه کنترل کامل پروژه رو دست بگیرید و از AI به عنوان یک همکار قابل اعتماد استفاده کنید!
تا حالا با دستیارهای کدنویسی هوش مصنوعی (مثل Cursor یا Copilot) کار کردید و به جای چیزی که دقیقاً در ذهن داشتید، یک چیز کاملاً دیگه تحویل گرفتید؟ یا یک بخش رو نوشته و یک بخش دیگه رو براتون خراب کرده
من جدیدا ابزاری رو پیدا کردم به اسم OpenSpec که داره این بازی رو برای همیشه عوض میکنه.
ایدهاش ساده و ناب هست: شما و هوش مصنوعی، قبل از نوشتن حتی یک خط کد، روی «چیزی که باید ساخته بشه» به توافق کامل میرسید.
دیگه خبری از پرامپتهای مبهم در چت و خروجیهای غیرقابل پیشبینی نیست. OpenSpec یک فرآیند کاری سبک و قدرتمند اضافه میکنه که پروژهها رو اینطوری پیش میبره:
۱. پیشنهاد تغییر (Change Proposal): شما به AI میگید چه قابلیتی رو میخواید اضافه کنید. AI یک ساختار کامل از مشخصات، وظایف و پیشنهادها رو براتون میسازه.
۲. بازبینی و هماهنگی: شما و AI با هم مشخصات رو دقیق میکنید تا همه چیز شفاف و بدون ابهام باشه.
۳. پیادهسازی: AI بر اساس مشخصات نهایی و توافق شده، کدنویسی رو انجام میده.
۴. آرشیو: بعد از اتمام کار، تغییرات به آرشیو منتقل میشن و مشخصات اصلی پروژه رو بهروز میکنن.
چرا این ابزار به خوبی جواب میده
- بدون نیاز به کلید API: نصب کن و استفاده کن. ساده و سریع.
- با ابزارهای فعلی شما کار میکنه: با Claude Code, Cursor, GitHub Copilot, Windsurf و دهها ابزار دیگه یکپارچه میشه.
- قابل پیشبینی و شفاف: دیگه نمیخواد حدس بزنید AI چی میسازه. همه چیز از قبل مشخصه.
- عالی برای پروژههای موجود: نه فقط برای پروژههای جدید، بلکه برای تغییر و توسعه کدهای قدیمی هم عالیه.
- مستندسازی خودکار: هر تغییری با مشخصات و وظایفش ثبت میشه و یک سند زنده از پروژه میسازه.
اینم آدرس گیتهابش که همه چیز اماده یک جا هست!
https://github.com/Fission-AI/OpenSpec
اگر نتونستنید دستی نصبش کنید ، میتونید فایل README[.]md رو کپی کنید ، بدید به همون ابزار Ai که براتون کد میزنه مثل Claude Code, Cursor, GitHub Copilot ، بگید نصبش کن!
<POURYA/>
تا حالا با دستیارهای کدنویسی هوش مصنوعی (مثل Cursor یا Copilot) کار کردید و به جای چیزی که دقیقاً در ذهن داشتید، یک چیز کاملاً دیگه تحویل گرفتید؟ یا یک بخش رو نوشته و یک بخش دیگه رو براتون خراب کرده
من جدیدا ابزاری رو پیدا کردم به اسم OpenSpec که داره این بازی رو برای همیشه عوض میکنه.
ایدهاش ساده و ناب هست: شما و هوش مصنوعی، قبل از نوشتن حتی یک خط کد، روی «چیزی که باید ساخته بشه» به توافق کامل میرسید.
دیگه خبری از پرامپتهای مبهم در چت و خروجیهای غیرقابل پیشبینی نیست. OpenSpec یک فرآیند کاری سبک و قدرتمند اضافه میکنه که پروژهها رو اینطوری پیش میبره:
۱. پیشنهاد تغییر (Change Proposal): شما به AI میگید چه قابلیتی رو میخواید اضافه کنید. AI یک ساختار کامل از مشخصات، وظایف و پیشنهادها رو براتون میسازه.
۲. بازبینی و هماهنگی: شما و AI با هم مشخصات رو دقیق میکنید تا همه چیز شفاف و بدون ابهام باشه.
۳. پیادهسازی: AI بر اساس مشخصات نهایی و توافق شده، کدنویسی رو انجام میده.
۴. آرشیو: بعد از اتمام کار، تغییرات به آرشیو منتقل میشن و مشخصات اصلی پروژه رو بهروز میکنن.
چرا این ابزار به خوبی جواب میده
- بدون نیاز به کلید API: نصب کن و استفاده کن. ساده و سریع.
- با ابزارهای فعلی شما کار میکنه: با Claude Code, Cursor, GitHub Copilot, Windsurf و دهها ابزار دیگه یکپارچه میشه.
- قابل پیشبینی و شفاف: دیگه نمیخواد حدس بزنید AI چی میسازه. همه چیز از قبل مشخصه.
- عالی برای پروژههای موجود: نه فقط برای پروژههای جدید، بلکه برای تغییر و توسعه کدهای قدیمی هم عالیه.
- مستندسازی خودکار: هر تغییری با مشخصات و وظایفش ثبت میشه و یک سند زنده از پروژه میسازه.
اینم آدرس گیتهابش که همه چیز اماده یک جا هست!
https://github.com/Fission-AI/OpenSpec
اگر نتونستنید دستی نصبش کنید ، میتونید فایل README[.]md رو کپی کنید ، بدید به همون ابزار Ai که براتون کد میزنه مثل Claude Code, Cursor, GitHub Copilot ، بگید نصبش کن!
<POURYA/>
GitHub
GitHub - Fission-AI/OpenSpec: Spec-driven development for AI coding assistants.
Spec-driven development for AI coding assistants. Contribute to Fission-AI/OpenSpec development by creating an account on GitHub.
🎙️ عنوان پادکست:
💧 A leaky goroutine certainly does suck!
خلاصه پادکست:
رویدادهای این هفته در دنیای Go با تمرکز بر قابلیتهای جدید برای شناسایی نشتهای goroutine و برنامههای جامعه پیش میرود. علاوه بر پذیرش پیشنهاد errors.AsType برای بهبود تجربه generics، در runtime/pprof و runtime یک پروفایل تازه برای تشخیص نشت goroutine اضافه شده تا روتینهای طولانیمدت ناخواسته سریعتر شناسایی شوند. همچنین ارجاع مستقیم به فیلدهای embedded در struct literals نوشتن کد را سادهتر میکند....
💧 A leaky goroutine certainly does suck!
خلاصه پادکست:
رویدادهای این هفته در دنیای Go با تمرکز بر قابلیتهای جدید برای شناسایی نشتهای goroutine و برنامههای جامعه پیش میرود. علاوه بر پذیرش پیشنهاد errors.AsType برای بهبود تجربه generics، در runtime/pprof و runtime یک پروفایل تازه برای تشخیص نشت goroutine اضافه شده تا روتینهای طولانیمدت ناخواسته سریعتر شناسایی شوند. همچنین ارجاع مستقیم به فیلدهای embedded در struct literals نوشتن کد را سادهتر میکند....
Forwarded from Linux Labdon
بجای دستور cat توی لینوکس میتونیم از bat استفاده کنیم!
ظاهر رنگی و قشنگتری داره، شماره خط نشون میده و از syntax highlighting هم پشتیبانی میکنه.
توضیحات کامل در گیت هاب پروژه
Github → github.com/sharkdp/bat
<Mohammad/>
ظاهر رنگی و قشنگتری داره، شماره خط نشون میده و از syntax highlighting هم پشتیبانی میکنه.
توضیحات کامل در گیت هاب پروژه
Github → github.com/sharkdp/bat
<Mohammad/>
GitHub
GitHub - sharkdp/bat: A cat(1) clone with wings.
A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.
👍1
Forwarded from Software Engineer Labdon
بالاخره Zed برای ویندوز منتشر شد!
یه ادیتور فوقالعاده سریع و خفن که به نظرم میتونه حسابی جای Visual Studio Code رو تنگ کنه.
من حدود ۸ ساله کدنویسی میکنم و از Eclipse و NetBeans گرفته تا JetBrains، همه رو امتحان کردم. از وقتی VsCode اومد، دیگه اون وسواس انتخاب ادیتور رو گذاشتم کنار تا وقتی که اسم Zed رو شنیدم.
یه ادیتور نوشتهشده با Rust و سرعتی در حد گاد
اول فقط برای مک بود، بعد رسید به لینوکس. منم که عشق به اوبونتو، سریع یه ماشین مجازی بالا آوردم و تستش کردم.
یه پروژه نسبتا سنگین داشتم، ریا نشه یه پلتفرم انبارداری با چت و مدیریت کارمندان و محصولات. با Zed رانش کردم و همونجا بود که برگای VsCodeم ریخت
سرعت، autocomplete محشر، لود سریع اکستنشنها، محیط مینیمال و مدرن و خلاصه یه تجربه بینقص بود. و حالا برای ویندوز هم ریلیز شد
اگه هنوز امتحانش نکردی، پیشنهاد میکنم حتما تستش کنی
https://zed.dev/
<Soheil Ghanbary/>
یه ادیتور فوقالعاده سریع و خفن که به نظرم میتونه حسابی جای Visual Studio Code رو تنگ کنه.
من حدود ۸ ساله کدنویسی میکنم و از Eclipse و NetBeans گرفته تا JetBrains، همه رو امتحان کردم. از وقتی VsCode اومد، دیگه اون وسواس انتخاب ادیتور رو گذاشتم کنار تا وقتی که اسم Zed رو شنیدم.
یه ادیتور نوشتهشده با Rust و سرعتی در حد گاد
اول فقط برای مک بود، بعد رسید به لینوکس. منم که عشق به اوبونتو، سریع یه ماشین مجازی بالا آوردم و تستش کردم.
یه پروژه نسبتا سنگین داشتم، ریا نشه یه پلتفرم انبارداری با چت و مدیریت کارمندان و محصولات. با Zed رانش کردم و همونجا بود که برگای VsCodeم ریخت
سرعت، autocomplete محشر، لود سریع اکستنشنها، محیط مینیمال و مدرن و خلاصه یه تجربه بینقص بود. و حالا برای ویندوز هم ریلیز شد
اگه هنوز امتحانش نکردی، پیشنهاد میکنم حتما تستش کنی
https://zed.dev/
<Soheil Ghanbary/>
Zed
Zed — The editor for what's next
Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
❤2👍2 1
🔵 عنوان مقاله
How to Get Started with GitHub Copilot CLI
🟢 خلاصه مقاله:
** این مطلب با راهنماییای عملی از Andrea Griffiths (GitHub) نشان میدهد چگونه با GitHub Copilot CLI شروع کنید تا در ترمینال، درخواستهای زبانی خود را به دستورات شِل تبدیل کنید، خطاها و فلگهای ناشناخته را توضیح بگیرید و سریعتر اشکالزدایی کنید. روند آغاز کار ساده است: نصب و ورود به GitHub CLI، افزودن افزونه Copilot و بررسی فعال بودن دسترسی Copilot روی حساب GitHub؛ سپس با gh copilot help و دستورات تولید/توضیح فرمانها، میتوانید قبل از اجرا خروجیها را بررسی کنید تا از ایمنی کار مطمئن شوید. این ابزار روی Bash، Zsh و PowerShell کار میکند و برای وظایف روزمره مثل جستوجو، مدیریت پردازهها و کار با Git چرخه بازخورد را کوتاه میکند.
همزمان، نوشتهای از Redowan Delowar درباره Organizing Go Tests پیشنهاد میشود که ساختاردهی حرفهای تستهای Go را مرور میکند: کنار هم نگهداشتن فایلهای *_test.go با کد، بهکارگیری تستهای جدولمحور و زیربخشها با t.Run، استفاده از پوشه testdata برای دادههای تست، همراه با بنچمارکها، مثالها، نامگذاری شفاف، گزارش پوشش و اتصال go test به CI. مجموع این توصیهها هم بهرهوری توسعه را بالا میبرد و هم کیفیت و قابلیت اعتماد تستها را.
#GitHub #Copilot #CLI #Go #Testing #DeveloperTools #Productivity #DevOps
🟣لینک مقاله:
https://golangweekly.com/link/175637/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How to Get Started with GitHub Copilot CLI
🟢 خلاصه مقاله:
** این مطلب با راهنماییای عملی از Andrea Griffiths (GitHub) نشان میدهد چگونه با GitHub Copilot CLI شروع کنید تا در ترمینال، درخواستهای زبانی خود را به دستورات شِل تبدیل کنید، خطاها و فلگهای ناشناخته را توضیح بگیرید و سریعتر اشکالزدایی کنید. روند آغاز کار ساده است: نصب و ورود به GitHub CLI، افزودن افزونه Copilot و بررسی فعال بودن دسترسی Copilot روی حساب GitHub؛ سپس با gh copilot help و دستورات تولید/توضیح فرمانها، میتوانید قبل از اجرا خروجیها را بررسی کنید تا از ایمنی کار مطمئن شوید. این ابزار روی Bash، Zsh و PowerShell کار میکند و برای وظایف روزمره مثل جستوجو، مدیریت پردازهها و کار با Git چرخه بازخورد را کوتاه میکند.
همزمان، نوشتهای از Redowan Delowar درباره Organizing Go Tests پیشنهاد میشود که ساختاردهی حرفهای تستهای Go را مرور میکند: کنار هم نگهداشتن فایلهای *_test.go با کد، بهکارگیری تستهای جدولمحور و زیربخشها با t.Run، استفاده از پوشه testdata برای دادههای تست، همراه با بنچمارکها، مثالها، نامگذاری شفاف، گزارش پوشش و اتصال go test به CI. مجموع این توصیهها هم بهرهوری توسعه را بالا میبرد و هم کیفیت و قابلیت اعتماد تستها را.
#GitHub #Copilot #CLI #Go #Testing #DeveloperTools #Productivity #DevOps
🟣لینک مقاله:
https://golangweekly.com/link/175637/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
The GitHub Blog
GitHub Copilot CLI: How to get started
From cloning a repository to opening a pull request, here’s how to streamline your workflow with Copilot CLI.
❤1
🔵 عنوان مقاله
Sift: A Lightweight Terminal UI for Displaying Go Test Results
🟢 خلاصه مقاله:
Sift یک رابط کاربری ترمینالی سبک برای نمایش نتایج آزمونهای Go است. با لولهکردن خروجی JSON در حالت verbose به این ابزار، نتایج به نمای قابلپیمایش با بخشهای تاشو تبدیل میشوند تا ابتدا روی موارد مهم تمرکز کنید و فقط هنگام نیاز جزئیات را باز کنید. این رویکرد شلوغی خروجی را کم میکند، خوانایی را بالا میبرد و فرایند عیبیابی را در همان محیط ترمینال سریعتر و سادهتر میسازد.
#Go #Testing #TUI #CLI #JSON #DeveloperTools #Sift
🟣لینک مقاله:
https://golangweekly.com/link/175641/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Sift: A Lightweight Terminal UI for Displaying Go Test Results
🟢 خلاصه مقاله:
Sift یک رابط کاربری ترمینالی سبک برای نمایش نتایج آزمونهای Go است. با لولهکردن خروجی JSON در حالت verbose به این ابزار، نتایج به نمای قابلپیمایش با بخشهای تاشو تبدیل میشوند تا ابتدا روی موارد مهم تمرکز کنید و فقط هنگام نیاز جزئیات را باز کنید. این رویکرد شلوغی خروجی را کم میکند، خوانایی را بالا میبرد و فرایند عیبیابی را در همان محیط ترمینال سریعتر و سادهتر میسازد.
#Go #Testing #TUI #CLI #JSON #DeveloperTools #Sift
🟣لینک مقاله:
https://golangweekly.com/link/175641/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - timtatt/sift: A lightweight terminal UI for displaying Go tests
A lightweight terminal UI for displaying Go tests. Contribute to timtatt/sift development by creating an account on GitHub.
❤1
🔵 عنوان مقاله
Excelize 2.10: A Pure Go Way to Work with Excel Spreadsheets
🟢 خلاصه مقاله:
نسخه 2.10 از Excelize یک کتابخانه پخته و فعال در اکوسیستم Go است که امکان خواندن و نوشتن فایلهای XLAM، XLSM، XLSX، XLTM و XLTX را بهصورت مستقیم و بدون وابستگیهای بومی فراهم میکند. بهدلیل Pure Go بودن، استقرار ساده است، باینریها قابل حملاند و روی Linux، macOS و Windows پایدار اجرا میشوند؛ از محیطهای ابری و container تا serverless و ابزارهای CLI. این کتابخانه ایجاد و ویرایش فایلها، کار با شیتها، سلولها، استایلها و فرمولها را پوشش میدهد و با پشتیبانی از مواردی مانند Data Validation، Conditional Formatting، نمودارها و Pivot Table برای ساخت گزارشهای حرفهای مناسب است. در این نسخه تمرکز بر پایداری، کارایی و سازگاری بهتر با ویژگیهای مدرن Excel ادامه یافته و Excelize همچنان گزینهای قابل اتکا برای اتوماسیون Excel در پروژههای Go بهشمار میآید.
#Excelize #Go #Golang #Excel #Spreadsheets #OpenSource #DataEngineering #Automation
🟣لینک مقاله:
https://golangweekly.com/link/175639/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Excelize 2.10: A Pure Go Way to Work with Excel Spreadsheets
🟢 خلاصه مقاله:
نسخه 2.10 از Excelize یک کتابخانه پخته و فعال در اکوسیستم Go است که امکان خواندن و نوشتن فایلهای XLAM، XLSM، XLSX، XLTM و XLTX را بهصورت مستقیم و بدون وابستگیهای بومی فراهم میکند. بهدلیل Pure Go بودن، استقرار ساده است، باینریها قابل حملاند و روی Linux، macOS و Windows پایدار اجرا میشوند؛ از محیطهای ابری و container تا serverless و ابزارهای CLI. این کتابخانه ایجاد و ویرایش فایلها، کار با شیتها، سلولها، استایلها و فرمولها را پوشش میدهد و با پشتیبانی از مواردی مانند Data Validation، Conditional Formatting، نمودارها و Pivot Table برای ساخت گزارشهای حرفهای مناسب است. در این نسخه تمرکز بر پایداری، کارایی و سازگاری بهتر با ویژگیهای مدرن Excel ادامه یافته و Excelize همچنان گزینهای قابل اتکا برای اتوماسیون Excel در پروژههای Go بهشمار میآید.
#Excelize #Go #Golang #Excel #Spreadsheets #OpenSource #DataEngineering #Automation
🟣لینک مقاله:
https://golangweekly.com/link/175639/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Ri Xu Online
Excelize Official Documentation
Go language API for Spreadsheet (Excel) Document
Forwarded from Software Engineer Labdon
یک هشدار به همه کسانی که مصاحبه شغلی دارند که کد review هم دارد!
نویسنده از تجربهای را بازگو می کند که با ایجاد فشار روانی بر وی، او را متقاعد کرده بودن که کدهای آلوده nodejs را روی سیستم برای review اجرا کند که در آخرین لحظه شک کرده و ماجرا کشف می شود.
https://blog.daviddodda.com/how-i-almost-got-hacked-by-a-job-interview
<VAHID NAMENI/>
نویسنده از تجربهای را بازگو می کند که با ایجاد فشار روانی بر وی، او را متقاعد کرده بودن که کدهای آلوده nodejs را روی سیستم برای review اجرا کند که در آخرین لحظه شک کرده و ماجرا کشف می شود.
https://blog.daviddodda.com/how-i-almost-got-hacked-by-a-job-interview
<VAHID NAMENI/>
👍4 3❤1
اخیرا درگیر کوچ کردن از یه سیستم مونولیت قدیمی با Symfony به میکروسرویس با Golang هستم. اونایی که تجربه این مدل کوچ کردن هارو توی سیستم های زیر بار و قدیمی دارن میدونن که مشکل اصلی دیتابیس و جلو رفتن بر اساس اسکیمای فعلی هست و این مدل کوچ ها باید تقریبا بدون Breaking Changes اتفاق بیوفته.
اینجا بود که با SqlBoiler توی زبان Go آشنا شدم.
مزایای SqlBoiler:
۱. ساخت Struct در یک چشم به هم زدن:
به جای اینکه ساعتها بشینم و دستی Structهای گو رو بر اساس جدولهای دیتابیس بنویسم، SQLBoiler در عرض چند ثانیه تمام مدلهای Type-Safe ما رو ساخت. وقتم رو خرید، خیلی زیاد!
۲. تمرکز بر دیتابیس (Database-First):
چون دیتابیس ما از قبل وجود داشت، این ابزار خیلی راحت خودشو با Schema ما سینک کرد. انگار ساخته شده بود برای همین وضعیت!
۳. کوئریهای ایمن و هوشمند:
دیگه نگران خطاهای احمقانه زمان اجرا (Runtime) نیستم. با تولید کوئریهای Strongly Typed، هر اشتباهی توی نام ستون یا جدول باشه، همون موقع
کامپایل گیر میده.
۴. فقط چیزهای ضروری رو بگیر:
قابلیت Whitelist/Blacklist جدولها و ستونها فوقالعاده است. توی محیط میکروسرویس که هر سرویس فقط به یه بخش دیتابیس نیاز داره، با این قابلیت فقط مدلهای مرتبط رو تولید کردم و کد اضافی رو حذف کردم.
اینم لینک گیتهابش:
https://github.com/aarondl/sqlboiler
<Sepehr Mohseni/>
اینجا بود که با SqlBoiler توی زبان Go آشنا شدم.
مزایای SqlBoiler:
۱. ساخت Struct در یک چشم به هم زدن:
به جای اینکه ساعتها بشینم و دستی Structهای گو رو بر اساس جدولهای دیتابیس بنویسم، SQLBoiler در عرض چند ثانیه تمام مدلهای Type-Safe ما رو ساخت. وقتم رو خرید، خیلی زیاد!
۲. تمرکز بر دیتابیس (Database-First):
چون دیتابیس ما از قبل وجود داشت، این ابزار خیلی راحت خودشو با Schema ما سینک کرد. انگار ساخته شده بود برای همین وضعیت!
۳. کوئریهای ایمن و هوشمند:
دیگه نگران خطاهای احمقانه زمان اجرا (Runtime) نیستم. با تولید کوئریهای Strongly Typed، هر اشتباهی توی نام ستون یا جدول باشه، همون موقع
کامپایل گیر میده.
۴. فقط چیزهای ضروری رو بگیر:
قابلیت Whitelist/Blacklist جدولها و ستونها فوقالعاده است. توی محیط میکروسرویس که هر سرویس فقط به یه بخش دیتابیس نیاز داره، با این قابلیت فقط مدلهای مرتبط رو تولید کردم و کد اضافی رو حذف کردم.
اینم لینک گیتهابش:
https://github.com/aarondl/sqlboiler
<Sepehr Mohseni/>
GitHub
GitHub - aarondl/sqlboiler: Generate a Go ORM tailored to your database schema.
Generate a Go ORM tailored to your database schema. - aarondl/sqlboiler
👍3 2
Forwarded from Bardia & Erfan
دارم پادکست پاول دوروف مال تلگرام رو میبینم
نکته جالبش اینجا اگر برادر نابغش نبود هیچ وقت تلگرامی وجود نداشت
نکته دیگه اینه اگر دقت کرده باشید پاول برعکس مارک زاکربرگ ، ایلان ماسک و . . .
زندگی خیلی لاکچری داره ولی ایلان و زاکربرگ همیشه ساده پوشن و خیلی زنی بی آلایشی از خودشون نشون میدن
حتی مارک و ایلان نهایتا ۶ تا ۸ ساعت میخوابن و پاول ۱۲ ساعت
دلیلش از نظر من خیلی جالبه
ایلان و زاکربرگ تمام سهام شرکتشون برای خودشون نیست! سرمایه گذار های بزرگی پشتشونه و هروقت بیان خودشون رو اینطور نشون بدن قطعابا فشار زیادی مواجه میشن
ولی پاول مالک خودش هست و برادرش و کلا ۴۰ برنامه نویس
هیچ وقت هم جواب به کسی نمیده
نکات خیلی زیادی داره این شخص پیشنهاد میکنم حتما درموردش مطالعه کنید
https://www.youtube.com/watch?v=qjPH9njnaVU
نکته جالبش اینجا اگر برادر نابغش نبود هیچ وقت تلگرامی وجود نداشت
نکته دیگه اینه اگر دقت کرده باشید پاول برعکس مارک زاکربرگ ، ایلان ماسک و . . .
زندگی خیلی لاکچری داره ولی ایلان و زاکربرگ همیشه ساده پوشن و خیلی زنی بی آلایشی از خودشون نشون میدن
حتی مارک و ایلان نهایتا ۶ تا ۸ ساعت میخوابن و پاول ۱۲ ساعت
دلیلش از نظر من خیلی جالبه
ایلان و زاکربرگ تمام سهام شرکتشون برای خودشون نیست! سرمایه گذار های بزرگی پشتشونه و هروقت بیان خودشون رو اینطور نشون بدن قطعابا فشار زیادی مواجه میشن
ولی پاول مالک خودش هست و برادرش و کلا ۴۰ برنامه نویس
هیچ وقت هم جواب به کسی نمیده
نکات خیلی زیادی داره این شخص پیشنهاد میکنم حتما درموردش مطالعه کنید
https://www.youtube.com/watch?v=qjPH9njnaVU
👍5🔥2 2❤1
🔵 عنوان مقاله
A Modern Approach to Preventing CSRF/CORF in Go
🟢 خلاصه مقاله:
این مقاله یک رویکرد مدرن برای مقابله با حملات CSRF/CORF در Go معرفی میکند. بهجای تکیه بر tokens، در Go 1.25 یک middleware به نام http.CrossOriginProtection ارائه شده که با استفاده از سیگنالهای امنیتی مرورگر (مانند Fetch Metadata و سیاستهای SameSite) میان درخواستهای امن هممبداء و درخواستهای مشکوک بینمبداء تفکیک ایجاد میکند. این میانافزار بهطور پیشفرض درخواستهای امن را میپذیرد و درخواستهای تغییردهنده حالت از مبداءهای نامطمئن را مسدود میکند، درحالیکه برای مسیرهای ضروری (مثل OAuth callback یا webhook) قابلیت allowlist دارد و با CORS نیز سازگار است. نتیجه، کاهش پیچیدگی پیادهسازی CSRF، تکیه بر قابلیتهای جدید مرورگرها، و استقرار مرحلهای (از حالت گزارش تا اعمال) است؛ ضمن اینکه جایگزین احراز هویت و کنترل دسترسی نیست، بلکه مکمل آنهاست.
#Go #CSRF #WebSecurity #FetchMetadata #SameSite #Middleware #GoLang #Security
🟣لینک مقاله:
https://golangweekly.com/link/175634/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
A Modern Approach to Preventing CSRF/CORF in Go
🟢 خلاصه مقاله:
این مقاله یک رویکرد مدرن برای مقابله با حملات CSRF/CORF در Go معرفی میکند. بهجای تکیه بر tokens، در Go 1.25 یک middleware به نام http.CrossOriginProtection ارائه شده که با استفاده از سیگنالهای امنیتی مرورگر (مانند Fetch Metadata و سیاستهای SameSite) میان درخواستهای امن هممبداء و درخواستهای مشکوک بینمبداء تفکیک ایجاد میکند. این میانافزار بهطور پیشفرض درخواستهای امن را میپذیرد و درخواستهای تغییردهنده حالت از مبداءهای نامطمئن را مسدود میکند، درحالیکه برای مسیرهای ضروری (مثل OAuth callback یا webhook) قابلیت allowlist دارد و با CORS نیز سازگار است. نتیجه، کاهش پیچیدگی پیادهسازی CSRF، تکیه بر قابلیتهای جدید مرورگرها، و استقرار مرحلهای (از حالت گزارش تا اعمال) است؛ ضمن اینکه جایگزین احراز هویت و کنترل دسترسی نیست، بلکه مکمل آنهاست.
#Go #CSRF #WebSecurity #FetchMetadata #SameSite #Middleware #GoLang #Security
🟣لینک مقاله:
https://golangweekly.com/link/175634/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
www.alexedwards.net
A modern approach to preventing CSRF in Go - Alex Edwards
❤3
🔵 عنوان مقاله
Gist of Go: Atomics
🟢 خلاصه مقاله:
در Go، atomics مجموعهای از عملیات سطحپایین در بسته sync/atomic هستند که امکان دسترسی thread-safe و lock-free به مقادیر حافظه مشترک را میدهند. آنها برای متغیرهای ساده (مثل شمارندهها، فلگهای وضعیت، و تعویض ایمن یک اشارهگر پیکربندی) بسیار سریع و مناسباند و با Load/Store، Add/Swap و CAS رابطههای happens-before لازم را تضمین میکنند. وقتی نیاز به حفظ ناهمبستگیهای چندفیلدی دارید یا بهروزرسانی چندمرحلهای میخواهید، استفاده از mutex یا کانالها شفافتر و کمخطرتر است. از اختلاط دسترسی atomic و non-atomic به یک متغیر خودداری کنید، به همترازی و false sharing توجه کنید، و برای دادههای read-mostly از atomic.Value بهره ببرید. نتیجه: در سناریوهای محدود، همزمانی بدون mutex واقعا شدنی است—به شرط رعایت دقیق مدل حافظه و الگوهای درست.
#golang #concurrency #atomics #lockfree #CAS #multithreading #memorymodel
🟣لینک مقاله:
https://golangweekly.com/link/175632/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Gist of Go: Atomics
🟢 خلاصه مقاله:
در Go، atomics مجموعهای از عملیات سطحپایین در بسته sync/atomic هستند که امکان دسترسی thread-safe و lock-free به مقادیر حافظه مشترک را میدهند. آنها برای متغیرهای ساده (مثل شمارندهها، فلگهای وضعیت، و تعویض ایمن یک اشارهگر پیکربندی) بسیار سریع و مناسباند و با Load/Store، Add/Swap و CAS رابطههای happens-before لازم را تضمین میکنند. وقتی نیاز به حفظ ناهمبستگیهای چندفیلدی دارید یا بهروزرسانی چندمرحلهای میخواهید، استفاده از mutex یا کانالها شفافتر و کمخطرتر است. از اختلاط دسترسی atomic و non-atomic به یک متغیر خودداری کنید، به همترازی و false sharing توجه کنید، و برای دادههای read-mostly از atomic.Value بهره ببرید. نتیجه: در سناریوهای محدود، همزمانی بدون mutex واقعا شدنی است—به شرط رعایت دقیق مدل حافظه و الگوهای درست.
#golang #concurrency #atomics #lockfree #CAS #multithreading #memorymodel
🟣لینک مقاله:
https://golangweekly.com/link/175632/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
antonz.org
Gist of Go: Atomics
Concurrent-safe operations without explicit synchronization.
❤2👍1
🔵 عنوان مقاله
CPU Cache-Friendly Data Structures in Go: 10x Speed with Same Algorithm
🟢 خلاصه مقاله:
** این مقاله نشان میدهد که در Go میتوان بدون تغییر الگوریتم و فقط با بهینهسازی نحوهٔ دسترسی به حافظه، به بهبودهایی تا ۱۰ برابر رسید. ایدهٔ اصلی این است که با بهرهگیری از محلیّت در CPU و نگه داشتن دادههای «داغ» در حافظهٔ پیوسته، تعداد cache miss به شدت کم میشود. راهکارهای کلیدی شامل استفاده از sliceهای پیوسته بهجای ساختارهای پر از pointer، فشردهسازی و چیدمان درست فیلدهای struct، انتخاب آگاهانه بین AoS و SoA، کاهش تخصیصها و استفاده از sync.Pool برای بازاستفادهٔ حافظه، و اجتناب از false sharing در برنامههای همزمان است. اندازهگیری با ابزارهای benchmark و pprof کمک میکند ببینیم گلوگاه واقعاً از کجاست. نتیجهٔ عملی طبق تجربهٔ Serge Skoredin: با حفظ همان منطق، تنها با طراحی cache‑friendly در Go میتوان جهشهای بزرگ کارایی بهدست آورد.
#Go #Golang #CPUCache #Performance #DataStructures #SystemsProgramming #Optimization #LowLatency
🟣لینک مقاله:
https://golangweekly.com/link/175636/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
CPU Cache-Friendly Data Structures in Go: 10x Speed with Same Algorithm
🟢 خلاصه مقاله:
** این مقاله نشان میدهد که در Go میتوان بدون تغییر الگوریتم و فقط با بهینهسازی نحوهٔ دسترسی به حافظه، به بهبودهایی تا ۱۰ برابر رسید. ایدهٔ اصلی این است که با بهرهگیری از محلیّت در CPU و نگه داشتن دادههای «داغ» در حافظهٔ پیوسته، تعداد cache miss به شدت کم میشود. راهکارهای کلیدی شامل استفاده از sliceهای پیوسته بهجای ساختارهای پر از pointer، فشردهسازی و چیدمان درست فیلدهای struct، انتخاب آگاهانه بین AoS و SoA، کاهش تخصیصها و استفاده از sync.Pool برای بازاستفادهٔ حافظه، و اجتناب از false sharing در برنامههای همزمان است. اندازهگیری با ابزارهای benchmark و pprof کمک میکند ببینیم گلوگاه واقعاً از کجاست. نتیجهٔ عملی طبق تجربهٔ Serge Skoredin: با حفظ همان منطق، تنها با طراحی cache‑friendly در Go میتوان جهشهای بزرگ کارایی بهدست آورد.
#Go #Golang #CPUCache #Performance #DataStructures #SystemsProgramming #Optimization #LowLatency
🟣لینک مقاله:
https://golangweekly.com/link/175636/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
skoredin.pro
CPU Cache-Friendly Data Structures in Go: 10x Speed
False sharing killed our performance. Data-oriented design saved it.
❤1🔥1
Gopher Academy
📌 Memory Allocation in Go ❌این پست اپدیت میشود ❌ 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go میپردازیم. درک درست از ساختار حافظه به شما کمک میکند عملکرد برنامههایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction…
☝️☝️☝️☝️☝️☝️☝️☝️☝️
❌این پست اپدیت میشود ❌
🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go میپردازیم.
درک درست از ساختار حافظه به شما کمک میکند عملکرد برنامههایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمی
❌این پست اپدیت میشود ❌
🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go میپردازیم.
درک درست از ساختار حافظه به شما کمک میکند عملکرد برنامههایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمی