🔴قابلیت sync.WaitGroup ویژگی های جدید گولنگ نسخه 1.25
در نسخه Go 1.25**، یک متد جدید به `sync.WaitGroup` اضافه شده به نام
🧠 چرا
در نسخههای قبلی برای اجرای goroutine همراه با شمارنده
روش قدیمی:
اگر
---
✅ روش جدید:
در Go 1.25، این الگو ساده شده:
همزمان
✨ مثال کامل
خروجی ممکن:
📌 مزایای
| مزیت | توضیح |
| -------------------------------------- | ---------------------------- |
| ✅ کد تمیزتر | نیازی به
| 🧠 جلوگیری از خطاهای رایج | مثل فراموشی
| 🧵 مناسب برای patternهای goroutine سبک | موازیسازی سریع و امن |
---
⚠️ نکته مهم
*
* برای استفاده از آن، باید مطمئن باشید که پروژهتان با Go 1.25 یا بالاتر کامپایل میشود.
* این متد دقیقاً مثل
در نسخه Go 1.25**، یک متد جدید به `sync.WaitGroup` اضافه شده به نام
Go()
** که هدفش سادهسازی اجرای goroutineها همراه با شمارندهی WaitGroup است.🧠 چرا
WaitGroup.Go()
اضافه شده؟در نسخههای قبلی برای اجرای goroutine همراه با شمارنده
WaitGroup`، باید دستی `Add()
و Done()
را بنویسید:روش قدیمی:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
doWork()
}()
اگر
Add
یا Done
را فراموش میکردی یا ترتیبش اشتباه بود، ممکن بود برنامه بنبست (deadlock) بشه یا goroutineها نشمارده بشن.---
✅ روش جدید:
wg.Go(fn)
در Go 1.25، این الگو ساده شده:
var wg sync.WaitGroup
wg.Go(func() {
doWork()
})
همزمان
Add(1)
انجام میشه و داخل goroutine بهطور خودکار Done()
صدا زده میشه—دیگه لازم نیست دستی چیزی بنویسی.✨ مثال کامل
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
i := i // capture variable
wg.Go(func() {
fmt.Println("working on task", i)
})
}
wg.Wait()
fmt.Println("All tasks done.")
}
خروجی ممکن:
working on task 0
working on task 1
working on task 2
All tasks done.
📌 مزایای
Go()
| مزیت | توضیح |
| -------------------------------------- | ---------------------------- |
| ✅ کد تمیزتر | نیازی به
Add
و Done
نیست || 🧠 جلوگیری از خطاهای رایج | مثل فراموشی
Done()
|| 🧵 مناسب برای patternهای goroutine سبک | موازیسازی سریع و امن |
---
⚠️ نکته مهم
*
Go()
فقط از Go 1.25 در دسترس است.* برای استفاده از آن، باید مطمئن باشید که پروژهتان با Go 1.25 یا بالاتر کامپایل میشود.
* این متد دقیقاً مثل
go func(){...}()
عمل میکند، فقط با مدیریت داخلی Add
و Done
.👍4❤3🔥3🎉1
Forwarded from Software Engineer Labdon
فهرستی ارزشمند برای برنامهنویسان حرفهای. مناسب برای توسعهدهندگان بکاند، فرانتاند، دواپس و برنامهنویسان عمومی.
https://github.com/charlax/professional-programming
https://github.com/charlax/professional-programming
🍾3🔥1
🔵 عنوان مقاله
🎨 Colorspace: Color Space Conversion Library
🟢 خلاصه مقاله:
این مقاله با بررسی فضاهای رنگی مختلف مانند sRGB و sRGB خطی، فضای رنگی CIE XYZ و فضاهای رنگی نوظهور OKLAB و OKLCH به بررسی پیشرفتها در تکنیکهای دستکاری رنگ میپردازد. هدف از این بررسیها، بهبود تبدیلهای رنگی و ایجاد امکان تنظیمات رنگی دقیقتر است. به خصوص، فضاهای رنگی جدید مانند OKLAB و OKLCH، به منظور تسهیل در اجرای تغییرات رنگی منظم و دقیقتر، طراحی شدهاند. این مقاله تاثیرات آنها را در مدیریت رنگ دیجیتال و طراحی گرافیک به تصویر میکشد.
🟣لینک مقاله:
https://golangweekly.com/link/171249/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🎨 Colorspace: Color Space Conversion Library
🟢 خلاصه مقاله:
این مقاله با بررسی فضاهای رنگی مختلف مانند sRGB و sRGB خطی، فضای رنگی CIE XYZ و فضاهای رنگی نوظهور OKLAB و OKLCH به بررسی پیشرفتها در تکنیکهای دستکاری رنگ میپردازد. هدف از این بررسیها، بهبود تبدیلهای رنگی و ایجاد امکان تنظیمات رنگی دقیقتر است. به خصوص، فضاهای رنگی جدید مانند OKLAB و OKLCH، به منظور تسهیل در اجرای تغییرات رنگی منظم و دقیقتر، طراحی شدهاند. این مقاله تاثیرات آنها را در مدیریت رنگ دیجیتال و طراحی گرافیک به تصویر میکشد.
🟣لینک مقاله:
https://golangweekly.com/link/171249/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - soypat/colorspace: Color space definitions in Go: sRGB, OKLAB/OKLCH and CIE spaces.
Color space definitions in Go: sRGB, OKLAB/OKLCH and CIE spaces. - soypat/colorspace
👍1
🔴قابلیت
در Go 1.25**، رابط جدیدی در بسته `hash` معرفی شده با نام
---
🧠این
رابط ساده زیر را دارد:
این متد وضعیت داخلی هش فعلی را کپی کرده و یک نمونهی مستقل جدید از همان نوع (
---
🔧 چرا مفید است؟
* صرفهجویی در زمان و CPU: کپی وضعیت داخلی، نیاز به محاسبه مجدد هش را حذف میکند.
* سازگاری با الگوریتمهای ترکیبی: وقتی میخواهید چند هش متفاوت را روی یک دنباله شروع کرده و بعداً ادامه دهید.
* کاربرد در HMAC، Merkle‑Tree، بررسی تکرارشونده بودن دادهها.
---
✅ مثال کاربردی
فرض کنید میخواهیم هش SHA256 بسازیم تا دادهها را در چند مرحله هش کنیم، ولی بخشی آغازین مشترک دارند:
📌 *پویا بودن نوع Cloner*: در runtime هش شونده است و نیاز به
---
⚖️ نکات
* نوع برگشتی دقیقاً همان نوع هش است؛ بدون downcast اضافی.
* هیچ اثر جانبی روی هش اصلی ندارد.
* متد روند هش را متوقف میکند و وضعیت فعلی را مکان جداگانه ذخیره مینماید.
---
🧭 جمعبندی
*این `hash.Cloner` در Go 1.25 به
* با
* برای ساخت هشهای موازی، HMAC یا الگوریتمهایی با بخش مشترک واقعاً کاربردی است.
Cloner
ویژگی های جدید گولنگ نسخه 1.25در Go 1.25**، رابط جدیدی در بسته `hash` معرفی شده با نام
Cloner
که به انواع `hash.Hash` اجازه میدهد **وضعیت داخلی (state) خود را کپی کند. این برای مواقعی بسیار مفید است که بخواهید از یک هش، مقدار میانی را ذخیره کرده و ادامه دهید، بدون آنکه کل روند هش را دوباره اجرا کنید.---
🧠این
hash.Cloner
چیست؟رابط ساده زیر را دارد:
type Cloner interface {
Clone() Hash
}
این متد وضعیت داخلی هش فعلی را کپی کرده و یک نمونهی مستقل جدید از همان نوع (
Hash
) بازمیگرداند. تمام پیادهسازیهای استاندارد Go مثل hash/maphash
این رابط را پیادهسازی کردهاند. ([tip.golang.org][1])---
🔧 چرا مفید است؟
* صرفهجویی در زمان و CPU: کپی وضعیت داخلی، نیاز به محاسبه مجدد هش را حذف میکند.
* سازگاری با الگوریتمهای ترکیبی: وقتی میخواهید چند هش متفاوت را روی یک دنباله شروع کرده و بعداً ادامه دهید.
* کاربرد در HMAC، Merkle‑Tree، بررسی تکرارشونده بودن دادهها.
---
✅ مثال کاربردی
فرض کنید میخواهیم هش SHA256 بسازیم تا دادهها را در چند مرحله هش کنیم، ولی بخشی آغازین مشترک دارند:
package main
import (
"crypto/sha256"
"fmt"
"hash"
)
func main() {
base := []byte("header")
h1 := sha256.New()
h1.Write(base) // وضعیت میانی
// کپی وضعیت هش
h2 := h1.(interface{ Clone() hash.Hash }).Clone()
// ادامه روی نسخه اول
h1.Write([]byte(" payload1"))
sum1 := h1.Sum(nil)
// ادامه روی نسخه دوم
h2.Write([]byte(" payload2"))
sum2 := h2.Sum(nil)
fmt.Printf("sum1: %x\n", sum1)
fmt.Printf("sum2: %x\n", sum2)
}
📌 *پویا بودن نوع Cloner*: در runtime هش شونده است و نیاز به
import "hash"
است.---
⚖️ نکات
* نوع برگشتی دقیقاً همان نوع هش است؛ بدون downcast اضافی.
* هیچ اثر جانبی روی هش اصلی ندارد.
* متد روند هش را متوقف میکند و وضعیت فعلی را مکان جداگانه ذخیره مینماید.
---
🧭 جمعبندی
*این `hash.Cloner` در Go 1.25 به
hash.Hash
امکان میدهد وضعیت داخلی خودش را کپی کند.* با
Clone()
میتوانید چند ریزهکاری هش را از همان نقطه شروع ادامه دهید—بدون محاسبه دوباره.* برای ساخت هشهای موازی، HMAC یا الگوریتمهایی با بخش مشترک واقعاً کاربردی است.
❤7
🔴قابلیت reflect.TypeAssert ویژگی های جدید گولنگ نسخه 1.25
در Go نسخه 1.25 یک تابع جدید در پکیج `reflect` به نام `reflect.TypeAssert` معرفی شده که به شکل زیر تعریف میشود:
این تابع اجازه میدهد مستقیماً از یک
---
🧠 چرا `TypeAssert` مهمه؟
وقتی از روش قدیمی استفاده میکنیم:
```go
val := v.Interface().(MyType)
```
ابتدا آدرس حافظه برای `interface{}` ساخته میشود، سپس assertion انجام میشود—که ممکن است تخصیص حافظه ناخواسته انجام بدهد.
با `reflect.TypeAssert` داریم:
* **مستقیماً از
* بدون ساختن
* سریعتر و کمهزینهتر.
---
## ✅ مثال عملی
### خروجی:
---
✅ جمعبندی
*این
* بدون overhead ای که تبدیل به
* مناسب برای مواردی که در reflection با performance حساس کار میکنید.
در Go نسخه 1.25 یک تابع جدید در پکیج `reflect` به نام `reflect.TypeAssert` معرفی شده که به شکل زیر تعریف میشود:
func TypeAssert[T interface{}](v reflect.Value) (T, bool)
این تابع اجازه میدهد مستقیماً از یک
reflect.Value
به نوع مشخص T
تبدیل شویم، به همان روشی که با type assertion در interface ها انجام میدهیم، اما با کارایی بهتر**—بدون تخصیص حافظه اضافیٔ `interface{}` و تبدیل مجدد به یک مقدار Go معمولی ([tip.golang.org][1]).---
🧠 چرا `TypeAssert` مهمه؟
وقتی از روش قدیمی استفاده میکنیم:
```go
val := v.Interface().(MyType)
```
ابتدا آدرس حافظه برای `interface{}` ساخته میشود، سپس assertion انجام میشود—که ممکن است تخصیص حافظه ناخواسته انجام بدهد.
با `reflect.TypeAssert` داریم:
* **مستقیماً از
reflect.Value
به MyType
.* بدون ساختن
interface{}
موقتی.* سریعتر و کمهزینهتر.
---
## ✅ مثال عملی
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
p := Person{"Alice", 30}
v := reflect.ValueOf(p)
// تبدیل مستقیم با TypeAssert
if val, ok := reflect.TypeAssert[Person](v); ok {
fmt.Printf("شد! نام: %s، سن: %d\n", val.Name, val.Age)
} else {
fmt.Println("نوع مطابقت ندارد")
}
// مثالی برای نوع اشتباه
if val, ok := reflect.TypeAssert[*Person](v); ok {
fmt.Println("این کار نمیشه:", val)
} else {
fmt.Println("اشتباه: v اصلاً *Person نیست")
}
}
### خروجی:
شد! نام: Alice، سن: 30
اشتباه: v اصلاً *Person نیست
---
✅ جمعبندی
*این
reflect.TypeAssert[T]
راهی کارا و تیپ-محور برای بازیابی مقدار Go از reflect.Value
است.* بدون overhead ای که تبدیل به
interface{}
ایجاد میکند.* مناسب برای مواردی که در reflection با performance حساس کار میکنید.
❤5🔥1
🔵 عنوان مقاله
Build Containers from Scratch
🟢 خلاصه مقاله:
فهمیدن مکانیزمهای پایهای کانتینرها با استفاده از ابزارهای اولیه لینوکس مانند chroot، فضاهای نام و cgroups ضروری است. این ابزارها به تعیین محیطهای جداگانه و مدیریت منابع برای فرآیندها کمک میکنند. پس از آن، با استفاده از Docker میتوان کانتینرها را بهراحتی ساخت و با Kubernetes آنها را مدیریت و به کار گرفت. Docker و Kubernetes به افزایش قابلیتهای استفاده مجدد و مدیریت بهینه منابع در محیطهای تولیدی کمک میکنند.
🟣لینک مقاله:
https://golangweekly.com/link/171542/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Build Containers from Scratch
🟢 خلاصه مقاله:
فهمیدن مکانیزمهای پایهای کانتینرها با استفاده از ابزارهای اولیه لینوکس مانند chroot، فضاهای نام و cgroups ضروری است. این ابزارها به تعیین محیطهای جداگانه و مدیریت منابع برای فرآیندها کمک میکنند. پس از آن، با استفاده از Docker میتوان کانتینرها را بهراحتی ساخت و با Kubernetes آنها را مدیریت و به کار گرفت. Docker و Kubernetes به افزایش قابلیتهای استفاده مجدد و مدیریت بهینه منابع در محیطهای تولیدی کمک میکنند.
🟣لینک مقاله:
https://golangweekly.com/link/171542/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Frontendmasters
Learn Containers from Scratch | Basics, Docker, Kubernetes
Get an introduction to containers from the ground up. Build a container by hand, then learn Docker, optimization, multi-container projects, and intro to Kubernetes.
❤3🔥1
Forwarded from AI Labdon
🤖 همهچیز درباره Grok 4 – نزدیکترین مدل به AGI (مدل انسانی)
🔸 قدرت پردازش: گراک ۴ با ۱۰۰ برابر قدرت بیشتر نسبت به Grok 2 آموزش دیده و نصف تاخیر (Latency) گراک ۳ رو داره.
🔸 دسترسی: احتمالاً نسخه Grok 3 بهزودی برای دانلود عمومی در دسترس قرار میگیره.
📈 بنچمارک AGI:
تو بنچمارک بسیار دشوار ARC-AGI که ماهها هیچ مدلی نتونسته بود حتی از مرز ۱۰٪ عبور کنه، گراک ۴ تونست در کمتر از ۱۲ ساعت به امتیاز ۱۵.۸٪ برسه؛ یک رکورد جدید!
📚 آزمونهای علمی:
در آزمون HLE با ۲۵۰۰ سؤال در سطح دکترا:
✅ Grok 4: امتیاز %25.4
میانگین انسانها: 5%
Gemini 2.5 Pro: %امتیاز 21.6
OpenAI o3-high: %امتیاز 21
✅ Grok 4 Heavy:
امتیاز عجیب و چشمگیر بیش از ۵۰ درصد
🧠 دیدگاه ماسک:
ایلان ماسک گفته: «دانشجوهای دکترا تو آزمونهایی که گراک قبول میشه، رد میشن!»
🚀 نسخه Heavy:
مدلی با اسم الهامگرفته از Falcon Heavy، که یک مدل مولتیایجنته.
ماسک میگه وقتی یه سوال پیچیده ازش بپرسید، بهجای یک جواب مستقیم، چندین ایجنت با هم مثل یه «تیم مطالعه» همکاری میکنن تا به بهترین پاسخ برسن.
🧾قیمت API:
پنجره زمینه: تا ۲۵۶ هزار توکن (عالی برای اسناد حجیم)
قیمت:
ورودی: ۳ دلار / یک میلیون توکن
خروجی: ۱۵ دلار / یک میلیون توکن
👇👇👇👇👇👇👇👇👇
@ai_labdon
🔸 قدرت پردازش: گراک ۴ با ۱۰۰ برابر قدرت بیشتر نسبت به Grok 2 آموزش دیده و نصف تاخیر (Latency) گراک ۳ رو داره.
🔸 دسترسی: احتمالاً نسخه Grok 3 بهزودی برای دانلود عمومی در دسترس قرار میگیره.
📈 بنچمارک AGI:
تو بنچمارک بسیار دشوار ARC-AGI که ماهها هیچ مدلی نتونسته بود حتی از مرز ۱۰٪ عبور کنه، گراک ۴ تونست در کمتر از ۱۲ ساعت به امتیاز ۱۵.۸٪ برسه؛ یک رکورد جدید!
📚 آزمونهای علمی:
در آزمون HLE با ۲۵۰۰ سؤال در سطح دکترا:
✅ Grok 4: امتیاز %25.4
میانگین انسانها: 5%
Gemini 2.5 Pro: %امتیاز 21.6
OpenAI o3-high: %امتیاز 21
✅ Grok 4 Heavy:
امتیاز عجیب و چشمگیر بیش از ۵۰ درصد
🧠 دیدگاه ماسک:
ایلان ماسک گفته: «دانشجوهای دکترا تو آزمونهایی که گراک قبول میشه، رد میشن!»
🚀 نسخه Heavy:
مدلی با اسم الهامگرفته از Falcon Heavy، که یک مدل مولتیایجنته.
ماسک میگه وقتی یه سوال پیچیده ازش بپرسید، بهجای یک جواب مستقیم، چندین ایجنت با هم مثل یه «تیم مطالعه» همکاری میکنن تا به بهترین پاسخ برسن.
🧾قیمت API:
پنجره زمینه: تا ۲۵۶ هزار توکن (عالی برای اسناد حجیم)
قیمت:
ورودی: ۳ دلار / یک میلیون توکن
خروجی: ۱۵ دلار / یک میلیون توکن
👇👇👇👇👇👇👇👇👇
@ai_labdon
Telegram
AI Labdon
🕸 AI Labdon
بروز ترین مرجع خبری در مورد دنیایی هوش مصنوعی
حمایت مالی:
https://www.coffeete.ir/mrbardia72
ادمین:
@mrbardia72
بروز ترین مرجع خبری در مورد دنیایی هوش مصنوعی
حمایت مالی:
https://www.coffeete.ir/mrbardia72
ادمین:
@mrbardia72
🔥2
🔵 عنوان مقاله
Minimock: A Tool to Generate Mocks from Interface Declarations
🟢 خلاصه مقاله:
مقاله به بررسی ابزاری پیشرفته برای برنامهنویسان میپردازد که قابلیت تولید ماکها و کمککنندههای با نوعگذاری استاتیک و همچنین پشتیبانی از عمومیسازیها (ژنریکها) را داراست. این ابزار کاملاً با بسته آزمایشی ادغام شده و فرآیند تست نرمافزار را بهبود میبخشد، باعث افزایش کارایی و انعطافپذیری در تستها میشود.
🟣لینک مقاله:
https://golangweekly.com/link/171564/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Minimock: A Tool to Generate Mocks from Interface Declarations
🟢 خلاصه مقاله:
مقاله به بررسی ابزاری پیشرفته برای برنامهنویسان میپردازد که قابلیت تولید ماکها و کمککنندههای با نوعگذاری استاتیک و همچنین پشتیبانی از عمومیسازیها (ژنریکها) را داراست. این ابزار کاملاً با بسته آزمایشی ادغام شده و فرآیند تست نرمافزار را بهبود میبخشد، باعث افزایش کارایی و انعطافپذیری در تستها میشود.
🟣لینک مقاله:
https://golangweekly.com/link/171564/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - gojuno/minimock: Powerful mock generation tool for Go programming language
Powerful mock generation tool for Go programming language - gojuno/minimock
❤2
🔴قابلیت
در نسخه Go 1.25**، ویژگی جدیدی به پکیج `log/slog` اضافه شده به نام
---
🧠ویزگی
این تابع یک attribute با کلید
---
✅ مثال عملی
🖨 خروجی (بهصورت متنی):
📦 در حالت JSON:
---
🔄 مقایسه با قبل از Go 1.25
در نسخههای قبلی، باید از
---
## ✅ جمعبندی
*این
* ساختار لاگ شما را به شکل JSON درختی درمیآورد (برای پردازش، ذخیره و تحلیل بهتر).
* کار کردن با ابزارهای log aggregation را بسیار سادهتر میکند.
* در پلتفرمهایی مثل Grafana Loki, Datadog, یا Cloud Logging ساختار لاگها خواناتر و قابل فیلتر است.
slog.GroupAttrs
ویژگی های جدید گولنگ نسخه 1.25در نسخه Go 1.25**، ویژگی جدیدی به پکیج `log/slog` اضافه شده به نام
slog.GroupAttrs
که برای **ساخت گروهبندیشدهی Attributeها در لاگها استفاده میشود. این ویژگی باعث میشود لاگهای شما ساختاریافتهتر، قابلخواندنتر، و بهتر برای پردازش توسط ابزارهای خارجی (مثل ELK، Loki، Datadog) باشند.---
🧠ویزگی
slog.GroupAttrs
چیه؟func GroupAttrs(key string, attrs ...Attr) Attr
این تابع یک attribute با کلید
key
و مقدار یک زیرگروه از attributeها میسازه. معادل چیزی شبیه به JSON زیر هست:{
"user": {
"id": 123,
"email": "alice@example.com"
}
}
---
✅ مثال عملی
package main
import (
"log/slog"
"os"
)
func main() {
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
logger.Info("user logged in",
slog.GroupAttrs("user",
slog.Int("id", 42),
slog.String("email", "user@example.com"),
),
slog.String("ip", "192.168.1.1"),
)
}
🖨 خروجی (بهصورت متنی):
time=2025-06-15T14:00:00Z level=INFO msg="user logged in" user.id=42 user.email=user@example.com ip=192.168.1.1
📦 در حالت JSON:
{
"time": "...",
"level": "INFO",
"msg": "user logged in",
"user": {
"id": 42,
"email": "user@example.com"
},
"ip": "192.168.1.1"
}
---
🔄 مقایسه با قبل از Go 1.25
در نسخههای قبلی، باید از
slog.Group()
استفاده میکردی که کمی verbose بود و در هندلرهای custom گاهی نیاز به دستکاری دستی داشت. حالا slog.GroupAttrs
دقیقاً برای این هدف بهشکل سادهسازیشده اضافه شده.---
## ✅ جمعبندی
*این
slog.GroupAttrs
روشی ساده و تمیز برای لاگ کردن دادههای گروهبندیشده است.* ساختار لاگ شما را به شکل JSON درختی درمیآورد (برای پردازش، ذخیره و تحلیل بهتر).
* کار کردن با ابزارهای log aggregation را بسیار سادهتر میکند.
* در پلتفرمهایی مثل Grafana Loki, Datadog, یا Cloud Logging ساختار لاگها خواناتر و قابل فیلتر است.
🔥6
🔴قابلیت
ویژگی جدید
🛡این
این
با این کار، حتی اگر مسیرهایی مثل
دسترسی به بیرون از ریشه
— این کمک بزرگی در مقابله با حملات Path Traversal است .
برای ایجاد آن:
بعداً میتوان از
---
⚙️ توسعه در Go 1.25: متدهای جدید
در نسخه 1.25، متدهایی مشابه آنچه در
— دیگر لازم نیست دائماً تابعهای عمومی را صدا بزنید، بلکه:
* `root.Chmod(path, mode)`
* `root.Chown(path, uid, gid)`
* `root.Chtimes(path, atime, mtime)`
* `root.Link(oldpath, newpath)`
* `root.MkdirAll(path, perm)`
* `root.RemoveAll(path)`
* `root.Rename(old, new)`
* `root.Symlink(old, new)`, `root.Readlink(path)`
* `root.WriteFile(name, data, perm)`
* `root.ReadFile(name)`
این متدها باعث سادهتر و ایمنتر شدن استفاده از
---
## 📝 مثال واقعی
نکات ایمنی
* تمام این عملیات فقط در داخل دایرکتوری
* حملههایی مثل
* در نسخههای قبل از 1.24، چنین قابلیت امنیتی بهصورت ابتدایی وجود نداشت.
---
✅ جمعبندی
* این
* با وجود این متدها، کار با فایلها سادهتر، خواناتر و امنتر شده و آسیبپذیریهای مربوط به دسترسی تصادفی یا ناخواسته حذف شدهاند.
os.Root
ویژگی های جدید گولنگ نسخه 1.25ویژگی جدید
os.Root
در Go 1.25 همچنان همان نوعی است که در Go 1.24 معرفی شد، ولی در نسخه 1.25 روشهای جدیدی برای تعامل با فایلها اضافه شده تا استفاده و ایمنی آن سادهتر شود🛡این
os.Root
چیه؟این
os.Root
اجازه میده عملیات فایل را به یک دایرکتوری مشخص محدود کنید. با این کار، حتی اگر مسیرهایی مثل
../../secret.txt
استفاده شود، دسترسی به بیرون از ریشه
os.Root
امکانپذیر نیست — این کمک بزرگی در مقابله با حملات Path Traversal است .
برای ایجاد آن:
root, err := os.OpenRoot("data")
if err != nil {
log.Fatal(err)
}
بعداً میتوان از
root
بهجای os
برای باز کردن، نوشتن یا پاک کردن فایلها استفاده کرد.---
⚙️ توسعه در Go 1.25: متدهای جدید
در نسخه 1.25، متدهایی مشابه آنچه در
os
وجود داشت به os.Root
اضافه شدهاند تا کار با آن کامل شود— دیگر لازم نیست دائماً تابعهای عمومی را صدا بزنید، بلکه:
* `root.Chmod(path, mode)`
* `root.Chown(path, uid, gid)`
* `root.Chtimes(path, atime, mtime)`
* `root.Link(oldpath, newpath)`
* `root.MkdirAll(path, perm)`
* `root.RemoveAll(path)`
* `root.Rename(old, new)`
* `root.Symlink(old, new)`, `root.Readlink(path)`
* `root.WriteFile(name, data, perm)`
* `root.ReadFile(name)`
این متدها باعث سادهتر و ایمنتر شدن استفاده از
os.Root
میشوند.---
## 📝 مثال واقعی
package main
import (
"fmt"
"log"
"os"
"time"
)
func main() {
root, err := os.OpenRoot("data")
if err != nil {
log.Fatal(err)
}
// ایجاد دایرکتوری
if err := root.MkdirAll("nested/dir", 0750); err != nil {
log.Fatal(err)
}
// نوشتن در فایل
msg := []byte("hello Go!")
if err := root.WriteFile("nested/dir/file.txt", msg, 0644); err != nil {
log.Fatal(err)
}
// تغییر زمان دسترسی و تغییر فایل
at := time.Now()
mt := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
if err := root.Chtimes("nested/dir/file.txt", at, mt); err != nil {
log.Fatal(err)
}
// خونده و چاپ محتوا
content, err := root.ReadFile("nested/dir/file.txt")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Content: %s\n", content)
// پاکسازی همه چیز
if err := root.RemoveAll("nested"); err != nil {
log.Fatal(err)
}
fmt.Println("Done")
}
نکات ایمنی
* تمام این عملیات فقط در داخل دایرکتوری
data
اتفاق میافتد؛ تلاش برای دسترسی به بیرون، خطا خواهد داد.* حملههایی مثل
file := "../etc/passwd"
مؤثر نیستند.* در نسخههای قبل از 1.24، چنین قابلیت امنیتی بهصورت ابتدایی وجود نداشت.
---
✅ جمعبندی
* این
os.Root
در Go 1.25 متدهای قدرتمندی برای کار با فایلها اضافه کرده است تا توسعهدهنده بتواند در داخل یک ریشه مشخص و ایمن عملیات انجام دهد.* با وجود این متدها، کار با فایلها سادهتر، خواناتر و امنتر شده و آسیبپذیریهای مربوط به دسترسی تصادفی یا ناخواسته حذف شدهاند.
🔥4
🔵 عنوان مقاله
go-ytdlp: yt-dlp CLI Bindings for Go
🟢 خلاصه مقاله:
yt-dlp یک ابزار دانلود چندرسانهای محبوب است که نه تنها برای یوتیوب بلکه برای صدها پلتفرم دیگر کاربرد دارد. این ابزار به کاربران امکان میدهد تا به راحتی محتوای صوتی و تصویری را از وبسایتهای مختلف دانلود کنند و از ویژگیهایی نظیر انتخاب کیفیت ویدئو، استخراج صدا از ویدئوها، دانلود لیست پخش کامل، و مدیریت پخش زنده بهرهمند است. این ابزار، که توسط جامعهای از توسعهدهندگان به طور مداوم بهروزرسانی میشود، در بین کاربرانی که به دنبال دانلود محتوا هستند بسیار محبوب و کارآمد شناخته شده است.
🟣لینک مقاله:
https://golangweekly.com/link/171561/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go-ytdlp: yt-dlp CLI Bindings for Go
🟢 خلاصه مقاله:
yt-dlp یک ابزار دانلود چندرسانهای محبوب است که نه تنها برای یوتیوب بلکه برای صدها پلتفرم دیگر کاربرد دارد. این ابزار به کاربران امکان میدهد تا به راحتی محتوای صوتی و تصویری را از وبسایتهای مختلف دانلود کنند و از ویژگیهایی نظیر انتخاب کیفیت ویدئو، استخراج صدا از ویدئوها، دانلود لیست پخش کامل، و مدیریت پخش زنده بهرهمند است. این ابزار، که توسط جامعهای از توسعهدهندگان به طور مداوم بهروزرسانی میشود، در بین کاربرانی که به دنبال دانلود محتوا هستند بسیار محبوب و کارآمد شناخته شده است.
🟣لینک مقاله:
https://golangweekly.com/link/171561/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - lrstanley/go-ytdlp: yt-dlp cli bindings for Go
yt-dlp cli bindings for Go. Contribute to lrstanley/go-ytdlp development by creating an account on GitHub.
❤3👍3
🔵 عنوان مقاله
doWM: A Tiling and Floating Window Manager for X11
🟢 خلاصه مقاله:
مقالهای معرفی شده است که درباره یک مدیر پنجره سریع و سبک که به طور کامل با زبان برنامهنویسی Go نوشته شده، بحث میکند. این مدیر پنجره میتواند به عنوان یک ورودی عالی برای کسانی که به لینوکس علاقهمند هستند و دارای پیشزمینه لازم در این زمینه هستند، استفاده شود تا بتوانند محیط کامپیوتری خود را سفارشیسازی کرده و آن را به شخصیسازی خود بپردازند. کد منبع و مستندات این مدیر پنجره در مخزن GitHub آن قابل دسترسی است.
🟣لینک مقاله:
https://golangweekly.com/link/171556/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
doWM: A Tiling and Floating Window Manager for X11
🟢 خلاصه مقاله:
مقالهای معرفی شده است که درباره یک مدیر پنجره سریع و سبک که به طور کامل با زبان برنامهنویسی Go نوشته شده، بحث میکند. این مدیر پنجره میتواند به عنوان یک ورودی عالی برای کسانی که به لینوکس علاقهمند هستند و دارای پیشزمینه لازم در این زمینه هستند، استفاده شود تا بتوانند محیط کامپیوتری خود را سفارشیسازی کرده و آن را به شخصیسازی خود بپردازند. کد منبع و مستندات این مدیر پنجره در مخزن GitHub آن قابل دسترسی است.
🟣لینک مقاله:
https://golangweekly.com/link/171556/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
❤1
🔴قابلیت `T.Attr`, `B.Attr`, و `F.Attr`. ویژگی های جدید گولنگ نسخه 1.25
در Go نسخه 1.25**، سه متد جدید به پکیج `testing` اضافه شدهاند: `T.Attr`, `B.Attr`, و `F.Attr`. اینها به شما اجازه میدهند **اتریبیوتهای دلخواه (کلید–مقدار) را مستقیماً به خروجی لاگ تست ارسال کنید.
---
🏷 چه کاری انجام میدهند؟
با استفاده از
* برای تستها: از
* برای بنچمارکها: از
* برای فریمورکهای fuzzing: از
---
✅ چرا مفید هستند؟
* دنبال کردن metadata مرتبط با تستها، مثل نسخه پکیج، وضعیت کانفیگ، دادههای ورودی خاص
* مناسب برای تولید خروجی قابلپردازش با
* واضح و مستقیم، بدون نیاز به استفاده از
---
🌟 مثال ساده
خروجی هنگام اجرای
---
📊 ترکیب با
اگر خروجی را با
---
🛠 مثال برای بنچمارکها
خروجی:
---
✅ جمعبندی
*این
* بهبود خوانایی لاگ و قابلیت تجزیهی ساختیافته در ابزارهای خودکار.
* بسیار سبک و بدون overhead، یک ویژگی جزئی ولی کاربردی برای ردیابی و دیباگ.
در Go نسخه 1.25**، سه متد جدید به پکیج `testing` اضافه شدهاند: `T.Attr`, `B.Attr`, و `F.Attr`. اینها به شما اجازه میدهند **اتریبیوتهای دلخواه (کلید–مقدار) را مستقیماً به خروجی لاگ تست ارسال کنید.
---
🏷 چه کاری انجام میدهند؟
با استفاده از
T.Attr(key, value)
میتوانید بهسادگی یک attribute با کلید key
و مقدار value
اضافه کنید و این در لاگ تست خواهد آمد:=== ATTR TestMyFeat myKey someValue
* برای تستها: از
T.Attr
* برای بنچمارکها: از
B.Attr
* برای فریمورکهای fuzzing: از
F.Attr
---
✅ چرا مفید هستند؟
* دنبال کردن metadata مرتبط با تستها، مثل نسخه پکیج، وضعیت کانفیگ، دادههای ورودی خاص
* مناسب برای تولید خروجی قابلپردازش با
test2json
* واضح و مستقیم، بدون نیاز به استفاده از
Log
یا fmt
---
🌟 مثال ساده
package mypkg_test
import "testing"
func TestSomething(t *testing.T) {
t.Attr("db", "postgres")
t.Attr("featureFlag", "enabled")
t.Log("running test with attributes")
// ... انجام تست اصلی ...
}
خروجی هنگام اجرای
go test
:=== RUN TestSomething
=== ATTR TestSomething db postgres
=== ATTR TestSomething featureFlag enabled
mypkg_test.go:10: running test with attributes
--- PASS: TestSomething (0.00s)
---
📊 ترکیب با
test2json
اگر خروجی را با
go test -json
یا test2json
بگیرد، این اتریبیوتها بهصورت structured میروند و ابزارهای CI/CD یا داشبوردها میتوانند آنها را بخوانند.---
🛠 مثال برای بنچمارکها
func BenchmarkMyOp(b *testing.B) {
b.Attr("iterations", b.N)
for i := 0; i < b.N; i++ {
// عملیات اصلی ...
}
}
خروجی:
=== BENCH: BenchmarkMyOp
=== ATTR BenchmarkMyOp iterations 1000
...
---
✅ جمعبندی
*این
T.Attr
(و معادلهای آن برای benchmark/fuzz) روشی ساده برای اضافه کردن metadata به تستها هستند.* بهبود خوانایی لاگ و قابلیت تجزیهی ساختیافته در ابزارهای خودکار.
* بسیار سبک و بدون overhead، یک ویژگی جزئی ولی کاربردی برای ردیابی و دیباگ.
❤3
🎯 ویژگی های جدید گولنگ نسخه 1.25 رو از اینجا بخونید
🔵synctest
🟢https://t.me/gopher_academy/3910
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵 json/v2
🟢https://t.me/gopher_academy/3913
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵 Container-aware GOMAXPROCS
🟢https://t.me/gopher_academy/3922
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵New GC
🟢 https://t.me/gopher_academy/3925
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵Anti-CSRF
🟢https://t.me/gopher_academy/3937
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵WaitGroup.Go
🟢https://t.me/gopher_academy/3943
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵FlightRecorder
🟢https://t.me/gopher_academy/3939
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵os.Root
🟢https://t.me/gopher_academy/3952
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵reflect.TypeAssert
🟢https://t.me/gopher_academy/3947
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵T.Attr
🟢https://t.me/gopher_academy/3956
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵slog.GroupAttrs
🟢https://t.me/gopher_academy/3951
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵hash.Cloner
🟢https://t.me/gopher_academy/3946
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵synctest
🟢https://t.me/gopher_academy/3910
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵 json/v2
🟢https://t.me/gopher_academy/3913
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵 Container-aware GOMAXPROCS
🟢https://t.me/gopher_academy/3922
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵New GC
🟢 https://t.me/gopher_academy/3925
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵Anti-CSRF
🟢https://t.me/gopher_academy/3937
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵WaitGroup.Go
🟢https://t.me/gopher_academy/3943
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵FlightRecorder
🟢https://t.me/gopher_academy/3939
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵os.Root
🟢https://t.me/gopher_academy/3952
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵reflect.TypeAssert
🟢https://t.me/gopher_academy/3947
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵T.Attr
🟢https://t.me/gopher_academy/3956
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵slog.GroupAttrs
🟢https://t.me/gopher_academy/3951
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵hash.Cloner
🟢https://t.me/gopher_academy/3946
▫️▪️▫️▪️▫️▪️▫️▪️▫️
❤4👍4🔥2🍾1
Gopher Academy pinned «🎯 ویژگی های جدید گولنگ نسخه 1.25 رو از اینجا بخونید 🔵synctest 🟢https://t.me/gopher_academy/3910 ▫️▪️▫️▪️▫️▪️▫️▪️▫️ 🔵 json/v2 🟢https://t.me/gopher_academy/3913 ▫️▪️▫️▪️▫️▪️▫️▪️▫️ 🔵 Container-aware GOMAXPROCS 🟢https://t.me/gopher_academy/3922 ▫️▪️▫️▪️▫️▪️▫️▪️▫️…»
🔵 عنوان مقاله
Lox: A Lexer and Parser Generator for Go
🟢 خلاصه مقاله:
مقاله به تحلیل و مقایسه دقیق دو ابزار تولید کننده پارسر میپردازد، که بر اساس ساختار و چارچوب عملیاتی آنها تمرکز دارد. پارسر مورد بحث در این مقاله از ANTLR الهام گرفته است که در آن ترکیب پارسر و لکسر و جدا سازی کد عملیاتی از دستور زبان مشخص است. با این حال، در مکانیزمهای عملیاتی اصلی، پارسر بیشتر شبیه به yacc است، که از الگوریتم LR(1) برای پارسینگ استفاده میکند و ساختاری بدون وابستگی دارد که نصب و نگهداری آن را آسانتر میکند.
🟣لینک مقاله:
https://golangweekly.com/link/171565/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Lox: A Lexer and Parser Generator for Go
🟢 خلاصه مقاله:
مقاله به تحلیل و مقایسه دقیق دو ابزار تولید کننده پارسر میپردازد، که بر اساس ساختار و چارچوب عملیاتی آنها تمرکز دارد. پارسر مورد بحث در این مقاله از ANTLR الهام گرفته است که در آن ترکیب پارسر و لکسر و جدا سازی کد عملیاتی از دستور زبان مشخص است. با این حال، در مکانیزمهای عملیاتی اصلی، پارسر بیشتر شبیه به yacc است، که از الگوریتم LR(1) برای پارسینگ استفاده میکند و ساختاری بدون وابستگی دارد که نصب و نگهداری آن را آسانتر میکند.
🟣لینک مقاله:
https://golangweekly.com/link/171565/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
dcaiafa.github.io
Lox
Lox is a lexer and parser generator for Go
🔥1
Forwarded from 𓄂 Bardia 𓆃
پاول دروف : اگه دانشآموزی و نمیدونی رو چی تمرکز کنی، برو سراغ ریاضی!
▪️ریاضی بهت یاد میده که به مغز خودت تکیه کنی، منطقی فکر کنی، مسئله رو خرد کنی و قدمبهقدم درست پیش بری.
▪️و این دقیقاً همون مهارتیه که برای ساختن شرکت، راه انداختن پروژه و موفقیت تو هر کاری لازمه!
▪️ریاضی بهت یاد میده که به مغز خودت تکیه کنی، منطقی فکر کنی، مسئله رو خرد کنی و قدمبهقدم درست پیش بری.
▪️و این دقیقاً همون مهارتیه که برای ساختن شرکت، راه انداختن پروژه و موفقیت تو هر کاری لازمه!
👍9
🔵 عنوان مقاله
🕹️ GORE: A Pure Go Minimal 'Doom' Implementation
🟢 خلاصه مقاله:
چند ماه پیش، پروژهای جالب توجه دوستداران برنامهنویسی و بازیهای کامپیوتری را به خود جلب کرد که شامل تبدیل نسخه اصلی بازی دوم از سال ١٩٩٣ به زبان برنامهنویسی گو بود. هدف از این پروژه تنها بازسازی بازی به زبان دیگر نبود، بلکه بهبود ساختار و کارایی کلی آن نیز در نظر گرفته شده بود. این تغییرات باعث شده بازی بدون نیاز به تنظیمات خاص پلتفرمی، روی سیستمها و دستگاههای مختلف به خوبی اجرا شود. یکی از جنبههای نوآورانه این پروژه، امکان اجرای بازی مستقیماً روی ترمینال است که نشاندهنده توانایی زبان گو در ارائه خروجیهای گرافیکی پیچیده در محیطی ساده است. این پروژه نه تنها زندگی جدیدی به یک اثر تاریخی در فرهنگ بازیهای ویدئویی میبخشد، بلکه امکان بازسازی بازیهای قدیمی دیگر را در محیطهای نرمافزاری معاصر فراهم میکند.
🟣لینک مقاله:
https://golangweekly.com/link/171558/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🕹️ GORE: A Pure Go Minimal 'Doom' Implementation
🟢 خلاصه مقاله:
چند ماه پیش، پروژهای جالب توجه دوستداران برنامهنویسی و بازیهای کامپیوتری را به خود جلب کرد که شامل تبدیل نسخه اصلی بازی دوم از سال ١٩٩٣ به زبان برنامهنویسی گو بود. هدف از این پروژه تنها بازسازی بازی به زبان دیگر نبود، بلکه بهبود ساختار و کارایی کلی آن نیز در نظر گرفته شده بود. این تغییرات باعث شده بازی بدون نیاز به تنظیمات خاص پلتفرمی، روی سیستمها و دستگاههای مختلف به خوبی اجرا شود. یکی از جنبههای نوآورانه این پروژه، امکان اجرای بازی مستقیماً روی ترمینال است که نشاندهنده توانایی زبان گو در ارائه خروجیهای گرافیکی پیچیده در محیطی ساده است. این پروژه نه تنها زندگی جدیدی به یک اثر تاریخی در فرهنگ بازیهای ویدئویی میبخشد، بلکه امکان بازسازی بازیهای قدیمی دیگر را در محیطهای نرمافزاری معاصر فراهم میکند.
🟣لینک مقاله:
https://golangweekly.com/link/171558/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - AndreRenaud/gore: Pure Go minimal Doom implementation
Pure Go minimal Doom implementation. Contribute to AndreRenaud/gore development by creating an account on GitHub.
❤3
Forwarded from AI Labdon
🔴انتقال 100 میلیون کتاب در 7 دقیقه؟!
یه دانشمند ایرانی داره آیندهی اینترنت رو بازنویسی میکنه...
▪️تو دنیایی که هوش مصنوعی داره مغز دنیا میشه، یه مشکل بزرگ داریم: مصرف وحشتناک انرژی در دیتاسنترها.
اما حالا دکتر علیرضا گراوند از دانشگاه لاوال کانادا، با ساخت یه تراشه نوری فوقپیشرفته ورق رو برگردونده.
▪️این تراشه به نازکی یه تار موئه، ولی قدرتش؟ باورنکردنیه:
⚡️ ۱ ترابیت بر ثانیه سرعت انتقال داده
⚡️ ۲۰ برابر سریعتر از تکنولوژیهای رایج
⚡️ مصرف انرژی فوقالعاده پایین
⚡️ طراحیشده مخصوص مراکز هوش مصنوعی
📚 فقط تصور کن: این تراشه میتونه حجم ۱۰۰ میلیون کتاب رو در کمتر از ۷ دقیقه جابهجا کنه — فقط با نور، بدون جریان برق!
یه دانشمند ایرانی داره آیندهی اینترنت رو بازنویسی میکنه...
▪️تو دنیایی که هوش مصنوعی داره مغز دنیا میشه، یه مشکل بزرگ داریم: مصرف وحشتناک انرژی در دیتاسنترها.
اما حالا دکتر علیرضا گراوند از دانشگاه لاوال کانادا، با ساخت یه تراشه نوری فوقپیشرفته ورق رو برگردونده.
▪️این تراشه به نازکی یه تار موئه، ولی قدرتش؟ باورنکردنیه:
⚡️ ۱ ترابیت بر ثانیه سرعت انتقال داده
⚡️ ۲۰ برابر سریعتر از تکنولوژیهای رایج
⚡️ مصرف انرژی فوقالعاده پایین
⚡️ طراحیشده مخصوص مراکز هوش مصنوعی
📚 فقط تصور کن: این تراشه میتونه حجم ۱۰۰ میلیون کتاب رو در کمتر از ۷ دقیقه جابهجا کنه — فقط با نور، بدون جریان برق!
🔥4❤2🕊2🍾1