Gopher Academy
3.33K subscribers
914 photos
40 videos
279 files
1.95K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72

ادمین تبلیغات:
@labdon_ads
Download Telegram
🔴قابلیت Synthetic time for testing ویژگی های جدید گولنگ نسخه 1.25

⏱️ چی هست این Synthetic Time؟

قطعه‌ای از کد که زمان واقعی (real-time) استفاده می‌کنه—مثلاً `time.Sleep(60*time.Second)`—در تست، باعث می‌شه نتایج:

* کند (شصت ثانیه‌ای وسط تست منتظر شیم؟!)
* غیرقابل اعتماد (وابسته به scheduler واقعی و بار سیستم)

این ویژگی testing/synctest این مشکل رو با فراهم کردن یک "زمان مصنوعی" حل می‌کنه—زمان فقط وقتی جلو می‌ره که goroutineها بلاک بشن، و همه چی بلافاصله و به صورت دترمینیستیک اجرا می‌شه

---

🔧 نحوه استفاده با مثال

مثال تابع با تأخیر و timeout:

func Read(in chan int) (int, error) {
select {
case v := <-in:
return v, nil
case <-time.After(60 * time.Second):
return 0, fmt.Errorf("timeout")
}
}


تست timeout بدون معطلی:

import "testing/synctest"

func TestReadTimeout(t *testing.T) {
synctest.Test(t, func(t *testing.T) {
ch := make(chan int)
_, err := Read(ch)
if err == nil {
t.Fatal("expected timeout, got nil")
}
})
}


در این تست:

* تابع درون synctest.Test اجرا می‌شه.
*این clock از جنس مصنوعیه؛ بدون انتظار، بعد از بلاک شدن goroutine‌ روی select، زمان مصنوعی ۶۰ ثانیه جلو میره و timeout فعال می‌شه—امتحان با سرعت و قابل اعتماد

---

⚙️ قابلیت synctest.Wait()

این متد اجازه می‌ده تا:

1. کدی با goroutine اجرا بشه،
2. منتظر بشیم همه goroutineها بلاک بشن،
3. سپس دقیقاً بررسی انجام بشه،
4. و ادامهٔ تست.

مثل این مثال:

func TestWait(t *testing.T) {
synctest.Test(t, func(t *testing.T) {
done := make(chan struct{})
go func() {
time.Sleep(time.Second)
close(done)
}()
synctest.Wait()
<-done
})
}


این تضمین می‌کنه که قبل از ادامه تست، همه goroutineها به نقطهٔ بلاک رسیده باشن

---

جمع‌بندی & پیشنهاد

*این Go 1.25 با testing/synctest تست‌ زمان‌محور و همزمان را سریع، مطمئن و ساده می‌کند.
* فقط کافیه تابع تست رو داخل synctest.Test (یا Run) بنویسید.
*این Wait() هم برای سناریوهای چندgoroutine مفیده.
* ویژگی در نسخه RC هست و باید ویژگی GOEXPERIMENT=synctest رو هنگام اجرای go test فعال کنید


👑 @gopher_academy
3👍3🔥1🍾1
🔵 عنوان مقاله
Charm Fang: A CLI Starter Kit for Cobra Apps

🟢 خلاصه مقاله:

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

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


👑 @gopher_academy
👍2
🔵 عنوان مقاله
Eliminating Dead Code in Go Projects

🟢 خلاصه مقاله:

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

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


👑 @gopher_academy
3
Gopher Academy
🔴قابلیت Synthetic time for testing ویژگی های جدید گولنگ نسخه 1.25 ⏱️ چی هست این Synthetic Time؟ قطعه‌ای از کد که زمان واقعی (real-time) استفاده می‌کنه—مثلاً `time.Sleep(60*time.Second)`—در تست، باعث می‌شه نتایج: * کند (شصت ثانیه‌ای وسط تست منتظر شیم؟!)…
🔴قابلیت json/v2 ویژگی های جدید گولنگ نسخه 1.25

در Go 1.25، بستهٔ `json/v2` (همراه با jsontext) معرفی شده است
یک نسخهٔ اساسی و پیشرفته‌تر نسبت به encoding/json قبلی که با فعال‌سازی آزمایشی از طریق متغیر محیطی GOEXPERIMENT=jsonv2 کار می‌کند

🔑 مزایای کلیدی json/v2

1. انعطاف‌پذیری در Marshal/Unmarshal

* دیگر محدود به یک رفتار یکنواخت نیستید؛ با MarshalToFunc و UnmarshalFromFunc می‌توانید رفتار سفارشی خود را برای هر نوع داده بنویسید

2. افزایش قابل‌توجه در سرعت

* به‌ویژه در عملیات خواندن (unmarshal)، تا ۱۰ برابر سریع‌تر از نسخهٔ فعلی گزارش شده است .

3. این API جدید برای تولید و مصرف جریان‌های داده

* امکان مستقیم خواندن از io.Reader و نوشتن به io.Writer فراهم شده (MarshalWrite, UnmarshalRead) بدون نیاز به شیء Encoder/Decoder جداگانه.

4. ویژگی‌های جدید همچون برچسب‌های سفارشی و رفتار پیش‌فرض بهبود یافته

* امکانات گسترده‌ای برای تنظیم سفارشی JSON وجود دارد (برچسب‌ها، inlining، skip کردن فیلدها و غیره) .

یک مثال مفهومی

فرض کنید می‌خواهید برای بولین‌ها (bool) به‌جای true/false از کاراکترهای ویژه مثل و استفاده کنید.

import (
"fmt"
"encoding/json/v2"
"encoding/json/v2/jsontext"
)

// Marshal custom برای bool:
boolMarshaler := json.MarshalToFunc(
func(enc *jsontext.Encoder, val bool) error {
if val {
return enc.WriteToken(jsontext.String("✓"))
}
return enc.WriteToken(jsontext.String("✗"))
},
)

// Marshal برای stringهای شبیه bool:
strMarshaler := json.MarshalToFunc(
func(enc *jsontext.Encoder, val string) error {
if val == "on" || val == "true" {
return enc.WriteToken(jsontext.String("✓"))
}
if val == "off" || val == "false" {
return enc.WriteToken(jsontext.String("✗"))
}
return json.SkipFunc
},
)

marshalers := json.JoinMarshalers(boolMarshaler, strMarshaler)

vals := []any{true, "off", "hello"}
data, err := json.Marshal(vals, json.WithMarshalers(marshalers))
fmt.Println(string(data), err)
// خروجی: ["✓","✗","hello"]


در این مثال:

* true به
* "off" به
* و رشتهٔ "hello" به حالت پیش‌فرض تبدیل می‌شود

📌 وضعیت کنونی و توصیه‌ها

*این Experimental: این ویژگی آزمایشی است و باید با GOEXPERIMENT=jsonv2 فعال شود
* نسخه فعلی encoding/json وقتی flag فعال باشد از json/v2 استفاده می‌کند و عملکرد قدیمی حفظ شده تا سازگاری کامل برقرار شود ([github.com][5]).
* توصیه شده: پروژه‌هایی که وابسته به عملکرد JSON هستند، با فعال‌سازی این flag تست شوند تا مشکلات ناسازگاری احتمالی شناسایی شود .

---
جمع‌بندی

*این json/v2 در Go 1.25 یک نسخه‌ی کاملاً بازطراحی‌شده است: سریع‌تر، انعطاف‌پذیرتر و پیشرفته‌تر.
* با قابلیت‌هایی مانند سفارشی‌سازی عمیق Marshal/Unmarshal و I/O مستقیم همراه است.
* هنوز آزمایشی‌ست؛ اگر پروژه‌ای دارید که نیاز به performance یا JSON پیچیده‌تری دارد، توصیه می‌شود با GOEXPERIMENT=jsonv2 امتحانش کنید.


👑 @gopher_academy
🔥7👍31
🔵 عنوان مقاله
BillionMail 3.0: Open Source Email Marketing Platform

🟢 خلاصه مقاله:

مقاله به بررسی یک سرویس سرور ایمیل و ارسال نامه‌خبری/ایمیل می‌پردازد که با زبان برنامه‌نویسی Go کار می‌کند. این نرم‌افزار تحت لیسانس AGPL منتشر شده است. کد منبع این پروژه نیز در GitHub قابل دسترسی است، که این امکان را برای توسعه‌دهندگان فراهم می‌کند تا در پروژه مشارکت یا آن را تغییر دهند. استفاده از زبان Go این اطمینان را به کاربران می‌دهد که نرم‌افزار با کارایی بالا و عملکرد قابل اعتمادی ارائه دهد.

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


👑 @gopher_academy
2
🔵 عنوان مقاله
Unregistry: Push Docker Images Directly to Remote Servers

🟢 خلاصه مقاله:

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

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


👑 @gopher_academy
1👍1
🔵 عنوان مقاله
makefile-graph: Turn a Makefile into a Graph

🟢 خلاصه مقاله:

این مقاله درباره ابزاری بحث می‌کند که هم به عنوان کتابخانه و هم ابزار CLI قابل استفاده است و برای تحلیل Makefile‌ها طراحی شده است. این ابزار، وابستگی‌های میان مختلف هدف‌های تعیین شده در Makefile‌ها را می‌خواند و آن‌ها را به شکل گراف درآورده تا توسط ابزار گرافیکی Graphviz dot نمایش داده شود. ویژگی دوگانه بودن این ابزار به همراه قابلیت نمایش تصویری، تحلیل و بهینه‌سازی فرایندهای ساخت نرم‌افزار را برای توسعه‌دهندگان آسان‌تر می‌کند.

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


👑 @gopher_academy
1👍1
خیلی جالبه، سازنده flask (از فریمورک های معروف پایتون) خودش پیشنهاد میکنه پروژه های جدید بکندی رو با گولنگ بنویسید!

https://lucumr.pocoo.org/2025/6/12/agentic-coding/

I've evaluated agent performance across different languages my workload, and if you can choose your language, I strongly recommend Go for new backend projects
👍95🍾2
🔵 عنوان مقاله
JSON Evolution in Go: From V1 to V2

🟢 خلاصه مقاله:

با ارائه بسته JSON v2 در نسخه 1.25 زبان برنامه نویسی Go که قرار است در ماه آگوست منتشر شود، ویژگی‌های جدید و بهبود‌های قابل توجهی معرفی شده‌اند. این به‌روزرسانی شامل افزودن برچسب‌های زمینه‌ی جدید، تغییرات در تنظیمات پیش‌فرض مارشال‌کردن، استفاده از رابط‌های برنامه‌نویسی API های جریانی، و دیگر امکانات است که برای تسهیل کار با داده‌های JSON در Go طراحی شده‌اند. یکی از مهم‌ترین پیشرفت‌ها، بهبود قابل توجه در فرآیند آنمارشال‌کردن است که تا ده برابر سریع‌تر از نسخ‌های قبلی گزارش شده‌ است، که این باعث افزایش کارایی و کاهش مصرف منابع در برنامه‌های کاربردی می‌شود.

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


👑 @gopher_academy
👍21
🔵 عنوان مقاله
Cloud66's Go Stack in 2025

🟢 خلاصه مقاله:

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

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


👑 @gopher_academy
1
🔵 عنوان مقاله
'Go Should Be More Opinionated'

🟢 خلاصه مقاله:

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

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


👑 @gopher_academy
3
🔵 عنوان مقاله
♟️ Running a Million-Board Chess MMO in a Single Process

🟢 خلاصه مقاله:

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

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


👑 @gopher_academy
3🔥2
🔴قابلیت Container-aware GOMAXPROCS ویژگی های جدید گولنگ نسخه 1.25


در Go 1.25، رفتار پیش‌فرض GOMAXPROCS (تعداد هسته‌های مجازی که به اجرای goroutineها اختصاص داده می‌شود) اکنون آگاه به محدودیت‌های cont GOMAXPROCS هم شده 1
* اگر quota عددی کسری ainer/cgroup است:

🧠 چه تغییری ایجاد شده؟

1. پیش‌فرض هوشمندانه در محیط‌های container

قبل از Go 1.25، اگر داخل یک کانتینر با CPU quota=1 اجرا می‌کردید، GOMAXPROCS برابر با تعداد کل CPU های میزبان (مثلاً 8 یا 32) بود.
حالا این مقدار با توجه به quota واقعی کانتینر تنظیم می‌شود:

* اگر quota برابر 1 باشد،باشد (مثلاً 2.3)، با گرد کردن به بالا مقدار 3 می‌گیرد
* حداقل مقدار، حتی برای quota=1 هم 2 خواهد بود، مگر اینکه affinity یا CPU فیزیکی کمتر باشد

2. بروزرسانی پویا در حین اجرای برنامه

اگر پس از شروع برنامه quota تغییر کند (مثلاً از Kubernetes)، runtime به‌صورت دوره‌ای (معمولاً هر ثانیه) مقدار GOMAXPROCS را به‌روز می‌کند .

3. امکان غیرفعال‌سازی

* اگر مقدار GOMAXPROCS دستی تنظیم شده یا در env مشخص شده باشد، این رفتار جدید غیرفعال می‌شود .
* همچنین می‌توانید با تنظیم Gontainermaxprocs=0 یا updatemaxprocs=0 رفتار را خاموش یا بروزرسانی پویا را متوقف کنید ([tip.golang.org][1]).

- 📚 مثال واقعی

فرض کنید در Kubernetes اجرای زیر را داریم:

kubectl run go-app --image=golang:1.25rc1 \
--limits="cpu=1"


درون برنامه:

fmt.Println("GOMAXPROCS:", runtime.GOMAXPROCS(0))


خروجی قبل از Go 1.25:

GOMAXPROCS: 8   // مثلاً روی یک نود ۸ هسته‌ای


در Go 1.25:

GOMAXPROCS: 1


اگر quota = 2.3 باشد، مقدار:

GOMAXPROCS: 3


و اگر quota = 1، ولی نود بزرگتر باشد، مقدار:

GOMAXPROCS: 2


حالا اگر حجم CPU محدودیت افزایش یابد، مثلاً از 1 به 2، مقدار نیز بدون نیاز به ری‌استارت برنامه بروزرسانی می‌شود

برای بازگرداندن به حالت پیش‌فرض پس از تنظیم دستی، می‌توانید بنویسید:

runtime.SetDefaultGOMAXPROCS()


چرا این مهم است؟

1. هماهنگی با منابع کانتینری – دیگر نیازی به تعیین دستی یا بسته شدن برنامه ندارید.

2. کاهش throttling – با منطبق شدن با quota، احتمال deschedule شدن threadها و تأخیر کاهش پیدا می‌کند .

3. کارایی بهتر GC و scheduler – هرچه GOMAXPROCS کمتر به real CPU نزدیک‌تر باشد، مصرف حافظه و context switch کاهش می‌یابد

4. مناسب برای Kubernetes و سرورلس – نیازی نیست ابزار اضافی مثل automaxprocs استفاده شود؛ همین رفتار در runtime تعبیه‌شده کافی است .

✳️ جمع‌بندی

در Go 1.25 به‌صورت هوشمندانه GOMAXPROCS را بر اساس محدودیت واقعی CPU در کانتینر تنظیم و بروزرسانی می‌کند. این ویژگی باعث اجرای بهینه‌تر برنامه‌ها در Kubernetes و محیط‌های مشابه می‌شود و نیاز به تنظیمات اضافی را حذف می‌کند. اگر در پروژه شما محدودیت CPU تعریف نکرده‌اید یا به رفتار پیشین نیاز دارید، می‌توانید با GODEBUG یا runtime.SetDefaultGOMAXPROCS() کنترل کنید.


👑 @gopher_academy
2👍1🎉1
🔵 عنوان مقاله
The Evolution of Caching Libraries in Go

🟢 خلاصه مقاله:

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

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


👑 @gopher_academy
3
🔵 عنوان مقاله
An Interactive Tour of Go 1.25

🟢 خلاصه مقاله:

نسخه نهایی Go 1.25 قرار است در ماه آگوست منتشر شود، و فرآیند توسعه آن طبق برنامه پیش می‌رود. نخستین نسخه آزمایشی، RC1، منتشر شده و نسخه دوم، RC2، انتظار می‌رود هفته آینده عرضه شود. یادداشت‌های پیش‌نویس انتشار داده شده و شامل اطلاعات مفیدی درباره ویژگی‌ها و بهبود‌های جدید است. علاوه بر این، آنتون، شخصیت شناخته‌شده در جامعه Go، تور‌های تعاملی خود را ارائه می‌دهد که در آن‌ها می‌توان به ویرایش و اجرای نمونه‌های کد مستقیماً از طریق مرورگر پرداخت.

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


👑 @gopher_academy
1👍1
🔴قابلیت New GC ویژگی های جدید گولنگ نسخه 1.25

در Go 1.25، یک جمع‌آورندهٔ زباله (GC) جدید به نام "Green Tea" معرفی شده که طراحی آن انقلابی‌ست، مخصوص برنامه‌هایی با تولید انبوه اشیاء کوچک و اجرا در سیستم‌های چندهسته‌ای مدرن:

🍵 چرا "Green Tea"؟

*درواقع GC فعلی Go مبتنی بر الگوریتم "tri-color parallel marking" است که اشیاء را جداگانه اسکن می‌کند؛ این باعث می‌شود حافظه به‌شکل تصادفی خوانده شود و کش پر کاربرد (L1/L2) زیاد miss شود

* این Green Tea به‌جای اسکن هر شیء، اسکن بلوک‌های حافظه بزرگ‌تر (span) را انجام می‌دهد تا locality حافظه حفظ شود، contention بین threadها کاهش یابد، و دسترسی‌ها به حافظه سریع‌تر شود .

⚙️ نحوه عملکرد:

1. در spans (بلاک ۸ کیلوبایتی حافظه با اشیاء هم‌اندازه)، دو نشانگر gray و black برای مدیریت حالت marking استفاده می‌شود. spans به صف عملگرها اضافه و بعد پردازش می‌شوند .

2. این ساختار باعث کاهش شدید فعالیت حافظه و افزایش همزمانی در محیط‌های خیلی هسته‌ای می‌شود .

📊 عملکرد و نتایج:

* در بنچ‌مارک‌های GC‑محور، کاهش ۱۰–۵۰٪ در مصرف CPU مربوط به GC مشاهده شده؛ مخصوصاً روی ماشین‌های چندهسته‌ای

* باعث کاهش بیش از ۵۰٪ در cache missها (L1/L2) شده

* البته در برخی بنچ‌مارک‌ها (مثلاً کامپایلر Go) ممکن است کمی افت عملکرد (\~۰.۵٪) دیده شود که در حال بررسی است

🧪 نحوه استفاده و فعال‌سازی:

* ویژگی Experimental است و می‌توانید آن را به‌صورت آزمایشی با:


  GOEXPERIMENT=greenteagc go test ./...


فعال کنید .
* هدف این است که بتوان آن را در Go 1.25 به‌عنوان یک گزینه فعال‌شدنی استفاده کرد، و ارزیابی واقعی روی پروژه‌ها صورت گیرد

✍️ مثال فرضی استفاده:

فرض کنید برنامه‌ای سرویس‌محور دارید که به‌طرز چشم‌گیری اشیاء کوچک ایجاد می‌کند (مثلاً در لایه‌ی JSON/API). با فعال کردن Green Tea:

درواقعه * GC حافظه را بلوکی اسکن می‌کند، نه شیء به شیء.
* بار CPU مربوط به GC کاهش می‌یابد و کارایی کلی اپلیکیشن بهتر می‌شود.

به‌عنوان مثال ساده:

func handler(w http.ResponseWriter, r *http.Request) {
// بارگذاری و پردازش داده های کوچک متعدد
blobs := make([]*MyStruct, 1000)
for i := range blobs {
blobs[i] = &MyStruct{/*...*/}
}
// استفاده از blobs
}


وقتی quota‌ی garbage ایجاد می‌شود، جدیدترین GC به‌جای اسکن ۱۰۰۰ شیء، spans را اسکن می‌کند و locality را حفظ می‌کند، بهینه‌تر عمل می‌نماید.

جمع‌بندی:

* این Green Tea GC الگوریتمی توپولوژی-آگاه است که با توجه به ساختار حافظه سیستم، عملکرد marking را بهینه می‌کند.
* برای برنامه‌هایی که اشیاء کوچک زیادی ایجاد می‌کنند و به performance حساس هستند، می‌تواند ۱۰–۵۰٪ کاهش در overhead GC فراهم کند.
* هنوز آزمایشی‌ست؛ برای فعال‌سازی از GOEXPERIMENT=greenteagc استفاده کنید و توصیه می‌شود تست‌های منتها اجرا دقیق انجام دهید.


👑 @gopher_academy
👍31
Forwarded from DevOps Labdon
🔵 عنوان مقاله
How Google Cloud is securing open-source credentials at scale (3 minute read)

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

🟣لینک مقاله:
https://cloud.google.com/blog/products/identity-security/securing-open-source-credentials-at-scale/?utm_source=tldrdevops


👑 @DevOps_Labdon
🔵 عنوان مقاله
Cross-Compiling 10,000+ Go CLI Packages Statically

🟢 خلاصه مقاله:

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

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


👑 @gopher_academy
2🔥1
Forwarded from AI Labdon
✍️Alireza KiakojouriAlireza Kiakojouri

بنیانگذار تلگرام: ChatGPT فکر نمی‌کند، فقط حرف می‌زند!/ پروژه‌ی مخفی برادران دورف چیست؟

پاول دورف به نشریه فرانسوی «لو پوئن» گفت: «مدل‌های هوش مصنوعی مثل ChatGPT فکر نمی‌کنند. فقط مقدار زیادی متن خوانده‌اند و پاسخی می‌دهند که به نظر درست می‌آید. اما واقعاً نمی‌فهمند و ما انسان‌ها چون زبان پیچیده را نشانه هوش می‌دانیم، فریب می‌خوریم. مدل‌های زبانی فقط حرف می‌زنند. اما این به معنای فهمیدن یا فکر کردن نیست.»

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

در حالی که غول‌هایی مانند OpenAI، گوگل، متا و حتی چین و روسیه در حال رقابت برای ساخت نسل بعدی هوش مصنوعی (AGI) هستند، پروژه نیکلای دورف می‌تواند معادلات را تغییر دهد.

اگر پروژه نیکلای موفق شود، ما شاهد تولد هوش مصنوعی‌ای خواهیم بود که فقط «هوشمندانه صحبت نمی‌کند»، بلکه واقعاً می‌فهمد، فکر می‌کند و تصمیم می‌گیرد.
2🔥2🕊2
New Feature in Go 1.25 version 🤔
🎉18👍64🍾2🕊1