🔵 عنوان مقاله
😅 (Ab)using Channels to Implement a 3D Pipe Game
🟢 خلاصه مقاله:
مقالهای که بررسی شده، به بررسی استفاده از کانالها به عنوان "لولهها" در بازیها میپردازد. کانالها در برنامهنویسی برای انتقال اطلاعات بین فرآیندها به کار میروند. این مقاله پیشنهاد میکند که از این کانالها برای انتقال دادههای بازی مانند امتیازات، دادههای بازیکنان، یا اطلاعات حالت بازی استفاده شود که میتواند به سادهسازی جریان دادهها و افزایش انعطافپذیری و قابلیت گسترش معماری بازی کمک کند. همچنین، این رویکرد میتواند تجربههای بازی نوآورانهای را فراهم آورد و بازیها را دینامیکتر و جذابتر برای بازیکنان کند.
🟣لینک مقاله:
https://golangweekly.com/link/171245/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
😅 (Ab)using Channels to Implement a 3D Pipe Game
🟢 خلاصه مقاله:
مقالهای که بررسی شده، به بررسی استفاده از کانالها به عنوان "لولهها" در بازیها میپردازد. کانالها در برنامهنویسی برای انتقال اطلاعات بین فرآیندها به کار میروند. این مقاله پیشنهاد میکند که از این کانالها برای انتقال دادههای بازی مانند امتیازات، دادههای بازیکنان، یا اطلاعات حالت بازی استفاده شود که میتواند به سادهسازی جریان دادهها و افزایش انعطافپذیری و قابلیت گسترش معماری بازی کمک کند. همچنین، این رویکرد میتواند تجربههای بازی نوآورانهای را فراهم آورد و بازیها را دینامیکتر و جذابتر برای بازیکنان کند.
🟣لینک مقاله:
https://golangweekly.com/link/171245/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
jro.sg
(Ab)using channels to implement a 3D pipe game
Channels? Did you mean 'fancy pipes'?
❤3🍾1
🔴قابلیت Anti‑CSRF protection ویژگی های جدید گولنگ نسخه 1.25
در Go 1.25، قابلیت جدیدی با نام Anti‑CSRF protection (محافظت در برابر CSRF) از طریق نوع جدید `http.CrossOriginProtection` معرفی شده است. این ویژگی بدون نیاز به توکن یا کوکی اضافی، حملات CSRF را با استفاده از اطلاعات Fetch metadata مرورگر مهار میکند.
---
🧠 چطوری کار میکنه؟
* این محافظ درخواستهای ناامن cross-origin را بلاک میکند**، خصوصاً برای متدهایی مثل `POST`, `PUT`, یا `DELETE`
* با استفاده از هدر `Sec-Fetch-Site` برای تشخیص اینکه درخواست واقعاً متعلق به دامنه میزبان است یا خیر
* در صورتی که این هدر موجود نباشد، از هدر `Origin` استفاده میکند و آن را با `Host` مقایسه میکند ([tip.golang.org][1], [antonz.org][2])
* متدهای `GET`, `HEAD` و `OPTIONS` همیشه مجاز هستند چون تغییر حالت سرور محسوب نمیشن
💻 مثال کاربردی
``` go
package main
import (
"io"
"log"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/get", func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "GET ok\n")
})
mux.HandleFunc("/post", func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "POST ok\n")
})
anti := http.NewCrossOriginProtection()
anti.AddTrustedOrigin("https://example.com")
anti.AddTrustedOrigin("https://*.example.com")
srv := &http.Server{
Addr: ":8080",
Handler: anti.Handler(mux),
}
log.Fatal(srv.ListenAndServe())
}
```
🧪 رفتارها:
درخواست محلی معتبر:
→ خروجی:
* درخواست cross-origin با هدر sec-fetch-site اشتباه:
→ پاسخ:
* درخواست Origin متفاوت از Host و بدون sec-fetch-site:
→ پاسخ:
* درخواست از یک origin مورد اعتماد:
→ خروجی:
* درخواست GET از هر origin:
→ خروجی:
---
✅ جمعبندی
| 💡 استفاده آسان | فقط wrap کردن
| 🔐 بدون توکن اضافی | با استفاده از دادههای Fetch metadata |
| 🔄 فعالسازی برای همه
| 🎯 امکان تعریف originهای قابلاعتماد | با
| 🧭 پشتیبانی مرورگرهای مدرن و fallback برای مرورگرهای قدیمی | استفاده از
در Go 1.25، قابلیت جدیدی با نام Anti‑CSRF protection (محافظت در برابر CSRF) از طریق نوع جدید `http.CrossOriginProtection` معرفی شده است. این ویژگی بدون نیاز به توکن یا کوکی اضافی، حملات CSRF را با استفاده از اطلاعات Fetch metadata مرورگر مهار میکند.
---
🧠 چطوری کار میکنه؟
* این محافظ درخواستهای ناامن cross-origin را بلاک میکند**، خصوصاً برای متدهایی مثل `POST`, `PUT`, یا `DELETE`
* با استفاده از هدر `Sec-Fetch-Site` برای تشخیص اینکه درخواست واقعاً متعلق به دامنه میزبان است یا خیر
* در صورتی که این هدر موجود نباشد، از هدر `Origin` استفاده میکند و آن را با `Host` مقایسه میکند ([tip.golang.org][1], [antonz.org][2])
* متدهای `GET`, `HEAD` و `OPTIONS` همیشه مجاز هستند چون تغییر حالت سرور محسوب نمیشن
💻 مثال کاربردی
``` go
package main
import (
"io"
"log"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/get", func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "GET ok\n")
})
mux.HandleFunc("/post", func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "POST ok\n")
})
anti := http.NewCrossOriginProtection()
anti.AddTrustedOrigin("https://example.com")
anti.AddTrustedOrigin("https://*.example.com")
srv := &http.Server{
Addr: ":8080",
Handler: anti.Handler(mux),
}
log.Fatal(srv.ListenAndServe())
}
```
🧪 رفتارها:
درخواست محلی معتبر:
curl -X POST http://localhost:8080/post \
-H "sec-fetch-site:same-origin"
→ خروجی:
POST ok
* درخواست cross-origin با هدر sec-fetch-site اشتباه:
curl -X POST http://localhost:8080/post \
-H "sec-fetch-site:cross-site"
→ پاسخ:
cross-origin request detected from Sec-Fetch-Site header
* درخواست Origin متفاوت از Host و بدون sec-fetch-site:
curl -X POST http://localhost:8080/post \
-H "origin:https://evil.com" \
-H "host:localhost"
→ پاسخ:
cross-origin request detected, and/or browser is out of date: Sec-Fetch-Site is missing, and Origin does not match Host
* درخواست از یک origin مورد اعتماد:
curl -X POST http://localhost:8080/post \
-H "origin:https://example.com" \
-H "host:localhost"
→ خروجی:
POST ok
* درخواست GET از هر origin:
curl http://localhost:8080/get \
-H "origin:https://evil.com"
→ خروجی:
GET ok
---
✅ جمعبندی
| 💡 استفاده آسان | فقط wrap کردن
http.Handler
با CrossOriginProtection
|| 🔐 بدون توکن اضافی | با استفاده از دادههای Fetch metadata |
| 🔄 فعالسازی برای همه
non-safe
متدها | بهصورت پیشفرض || 🎯 امکان تعریف originهای قابلاعتماد | با
AddTrustedOrigin
|| 🧭 پشتیبانی مرورگرهای مدرن و fallback برای مرورگرهای قدیمی | استفاده از
Origin
در صورت نبود Sec-Fetch-Site
|❤2🍾1
🔴قابلیت
در Go نسخه 1.25، ویژگی جدیدی به نام
ابزاری سبک برای ثبت رخدادهای اخیر اجرای برنامه، بدون نیاز به فعال بودن کامل `trace` در تمام مدت.
---
🧠 این FlightRecorder چیه؟
📌 بهصورت خلاصه:
* یک (circular buffer) برای traceهای اجرا است.
* همیشه در پسزمینه اجرا میشود، اما فقط دادههای اخیر را نگه میدارد.
* زمانی که نیاز داری (مثلاً هنگام خطا یا کندی)، میتونی trace لحظهای رو ازش دریافت کنی.
این ویژگی برای debug کردن اتفاقاتی که چند ثانیه قبل از یک مشکل رخ دادهاند بسیار مفیده.
---
⚙️ چطور کار میکنه؟
1. ابتدا
2. و
3. برنامه اجرا میشود و FlightRecorder رخدادهای اخیر را ذخیره میکند.
4. در لحظهای خاص (مثلاً هنگام خطا)، میتونیم trace را در فایل بنویسیم با
---
✨ مثال کامل:
🔍 بررسی trace
برای مشاهده خروجی
یک رابط گرافیکی در مرورگر باز میشود که:
* goroutineها
* block/wait
* garbage collection
* system callها
* و delayها را نمایش میدهد.
---
🟢 مزایا
| سبک و کمهزینه | همیشه در حال اجرا است اما فقط بخشی از اطلاعات را نگه میدارد. |
| برای production مناسب | نیاز به فعالسازی trace کامل نیست. |
| ابزار عالی برای تحلیل post-mortem | مخصوصاً وقتی crash یا slowdown بدون هشدار قبلی رخ داده. |
| کاملاً سازگار با `go tool trace` | بدون نیاز به ابزار جدید. |
FlightRecorder
ویژگی های جدید گولنگ نسخه 1.25در Go نسخه 1.25، ویژگی جدیدی به نام
FlightRecorder
در پکیج `runtime/trace` معرفی شده ابزاری سبک برای ثبت رخدادهای اخیر اجرای برنامه، بدون نیاز به فعال بودن کامل `trace` در تمام مدت.
---
🧠 این FlightRecorder چیه؟
📌 بهصورت خلاصه:
* یک (circular buffer) برای traceهای اجرا است.
* همیشه در پسزمینه اجرا میشود، اما فقط دادههای اخیر را نگه میدارد.
* زمانی که نیاز داری (مثلاً هنگام خطا یا کندی)، میتونی trace لحظهای رو ازش دریافت کنی.
این ویژگی برای debug کردن اتفاقاتی که چند ثانیه قبل از یک مشکل رخ دادهاند بسیار مفیده.
---
⚙️ چطور کار میکنه؟
1. ابتدا
trace.NewFlightRecorder(config)
را میسازیم.2. و
rec.Start()
را فراخوانی میکنیم.3. برنامه اجرا میشود و FlightRecorder رخدادهای اخیر را ذخیره میکند.
4. در لحظهای خاص (مثلاً هنگام خطا)، میتونیم trace را در فایل بنویسیم با
rec.WriteTo()
.---
✨ مثال کامل:
package main
import (
"fmt"
"log"
"os"
"runtime/trace"
"time"
)
func main() {
// ۱. پیکربندی Recorder
cfg := trace.FlightRecorderConfig{
MinAge: 5 * time.Second, // حداقل مدت نگهداری اطلاعات
MaxBytes: 3 << 20, // 3 مگابایت بافر
}
rec := trace.NewFlightRecorder(cfg)
// ۲. شروع ضبط
if err := rec.Start(); err != nil {
log.Fatal(err)
}
defer rec.Stop()
// ۳. شبیهسازی اجرای برنامه
fmt.Println("⏳ برنامه در حال اجراست...")
time.Sleep(7 * time.Second) // این زمان trace میشود
// ۴. ذخیره trace هنگام رخداد خاص
f, _ := os.Create("flight.out")
defer f.Close()
if n, err := rec.WriteTo(f); err != nil {
log.Fatal("❌ خطا در نوشتن trace:", err)
} else {
fmt.Printf("✅ trace نوشته شد (%d bytes)\n", n)
}
}
🔍 بررسی trace
برای مشاهده خروجی
.out
:go tool trace flight.out
یک رابط گرافیکی در مرورگر باز میشود که:
* goroutineها
* block/wait
* garbage collection
* system callها
* و delayها را نمایش میدهد.
---
🟢 مزایا
| سبک و کمهزینه | همیشه در حال اجرا است اما فقط بخشی از اطلاعات را نگه میدارد. |
| برای production مناسب | نیاز به فعالسازی trace کامل نیست. |
| ابزار عالی برای تحلیل post-mortem | مخصوصاً وقتی crash یا slowdown بدون هشدار قبلی رخ داده. |
| کاملاً سازگار با `go tool trace` | بدون نیاز به ابزار جدید. |
❤7
🔵 عنوان مقاله
How to Manage Configuration Settings in Go Webapps
🟢 خلاصه مقاله:
در مقالهای توسط الکس، روشهای مختلف ارسال پیکربندی به یک برنامه تشریح شدهاست که شامل استفاده از پارامترهای CLI، متغیرهای محیطی، و فایلهای پیکربندی میشود. هر کدام از این روشها مزایا و قابلیتهای خاص خود را دارند و انتخاب مناسب بستگی به ترجیحات شخصی و نیازهای برنامه دارد. الکس با بررسی مزایا و معایب هر روش، ترجیحات خود را بیان میکند و ذکر میکند که انتخاب روش پیکربندی بستگی به نیازهای خاص برنامهای که روی آن کار میشود، دارد.
🟣لینک مقاله:
https://golangweekly.com/link/171246/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How to Manage Configuration Settings in Go Webapps
🟢 خلاصه مقاله:
در مقالهای توسط الکس، روشهای مختلف ارسال پیکربندی به یک برنامه تشریح شدهاست که شامل استفاده از پارامترهای CLI، متغیرهای محیطی، و فایلهای پیکربندی میشود. هر کدام از این روشها مزایا و قابلیتهای خاص خود را دارند و انتخاب مناسب بستگی به ترجیحات شخصی و نیازهای برنامه دارد. الکس با بررسی مزایا و معایب هر روش، ترجیحات خود را بیان میکند و ذکر میکند که انتخاب روش پیکربندی بستگی به نیازهای خاص برنامهای که روی آن کار میشود، دارد.
🟣لینک مقاله:
https://golangweekly.com/link/171246/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
www.alexedwards.net
How to manage configuration settings in Go web applications - Alex Edwards
❤3
Forwarded from Bardia & Erfan
🤖 علاقهمند به دنیای هوش مصنوعی هستی؟
دنبال میکنی که چطور AI داره دنیا رو متحول میکنه؟
پس جای درستی اومدی!
🎯 در کانال ما هر روز:
🔍 جدیدترین اخبار و دستاوردهای دنیای AI
🧠 تحلیل تخصصی در حوزه یادگیری ماشین، دیپ لرنینگ و مدلهای زبانی
💼 بررسی کاربردهای هوش مصنوعی در پزشکی، صنعت، آموزش، امنیت و اقتصاد
🛠 معرفی ابزارها، دورهها و منابع یادگیری
📈 بررسی ترندها و آینده فناوریهای مرتبط با هوش مصنوعی
همهی اینها به زبان ساده، خلاصه و قابل فهم برای همه علاقهمندان — از مبتدی تا حرفهای
👇👇👇👇👇
https://t.me/ai_labdon
دنبال میکنی که چطور AI داره دنیا رو متحول میکنه؟
پس جای درستی اومدی!
🎯 در کانال ما هر روز:
🔍 جدیدترین اخبار و دستاوردهای دنیای AI
🧠 تحلیل تخصصی در حوزه یادگیری ماشین، دیپ لرنینگ و مدلهای زبانی
💼 بررسی کاربردهای هوش مصنوعی در پزشکی، صنعت، آموزش، امنیت و اقتصاد
🛠 معرفی ابزارها، دورهها و منابع یادگیری
📈 بررسی ترندها و آینده فناوریهای مرتبط با هوش مصنوعی
همهی اینها به زبان ساده، خلاصه و قابل فهم برای همه علاقهمندان — از مبتدی تا حرفهای
👇👇👇👇👇
https://t.me/ai_labdon
❤2
🔵 عنوان مقاله
Fix Go Bugs and Bottlenecks Fast with AppSignal
🟢 خلاصه مقاله:
AppSignal یک ابزار مفید برای برنامه نویسان زبان Go است که به آنها امکان تشخیص و رفع اشکال، پیگیری مشکلات عملکردی و انتشار برنامهها با اعتماد به نفس را میدهد. این ابزار، که استفاده از آن آسان و مخصوص تیمهایی است که به کد خود اهمیت میدهند، به راحتی نصب میشود. AppSignal به کاربران جدید اجازه میدهد تا با یک دوره آزمایشی رایگان که نیاز به اطلاعات کارت اعتباری ندارد، شروع به کار کنند.
🟣لینک مقاله:
https://golangweekly.com/link/171236/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Fix Go Bugs and Bottlenecks Fast with AppSignal
🟢 خلاصه مقاله:
AppSignal یک ابزار مفید برای برنامه نویسان زبان Go است که به آنها امکان تشخیص و رفع اشکال، پیگیری مشکلات عملکردی و انتشار برنامهها با اعتماد به نفس را میدهد. این ابزار، که استفاده از آن آسان و مخصوص تیمهایی است که به کد خود اهمیت میدهند، به راحتی نصب میشود. AppSignal به کاربران جدید اجازه میدهد تا با یک دوره آزمایشی رایگان که نیاز به اطلاعات کارت اعتباری ندارد، شروع به کار کنند.
🟣لینک مقاله:
https://golangweekly.com/link/171236/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Application Monitoring for Ruby on Rails, Elixir, Node.js & Python
AppSignal APM offers error tracking, performance monitoring, dashboards, host metrics, and alerts. Built for Ruby, Ruby on Rails, Elixir, Node.js, and JavaScript.
❤2
🔴قابلیت 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