🔴قابلیت
ویژگی جدید
🛡این
این
با این کار، حتی اگر مسیرهایی مثل
دسترسی به بیرون از ریشه
— این کمک بزرگی در مقابله با حملات 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
🔵 عنوان مقاله
What's //go:nosplit For?
🟢 خلاصه مقاله:
زبان برنامهنویسی Go ویژگیهایی دارد که به توسعهدهندگان اجازه میدهد با استفاده از دستورالعملهای محور به نظر، جنبههای مختلفی از اجرای کد خود را تنظیم کنند. یکی از این دستورالعملها "nosplit" است که از تقسیم پشته در توابع مشخص شده جلوگیری میکند و میتواند در سناریوهای خاص، عملکرد بهتری ارائه دهد؛ اما ممکن است منجر به خطاهای اجرایی یا قفل شدن زمانبندی شود. درک صحیح و استفاده از این دستورالعملها میتواند کنترل قابل توجهی بر عملکرد برنامههای Go ارائه دهد.
🟣لینک مقاله:
https://golangweekly.com/link/171543/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
What's //go:nosplit For?
🟢 خلاصه مقاله:
زبان برنامهنویسی Go ویژگیهایی دارد که به توسعهدهندگان اجازه میدهد با استفاده از دستورالعملهای محور به نظر، جنبههای مختلفی از اجرای کد خود را تنظیم کنند. یکی از این دستورالعملها "nosplit" است که از تقسیم پشته در توابع مشخص شده جلوگیری میکند و میتواند در سناریوهای خاص، عملکرد بهتری ارائه دهد؛ اما ممکن است منجر به خطاهای اجرایی یا قفل شدن زمانبندی شود. درک صحیح و استفاده از این دستورالعملها میتواند کنترل قابل توجهی بر عملکرد برنامههای Go ارائه دهد.
🟣لینک مقاله:
https://golangweekly.com/link/171543/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
mcyoung.xyz
What's //go:nosplit for? · mcyoung
🔥2
🔵 عنوان مقاله
Effortless Go Contract Testing: Inferred Automatically From Traffic
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته، به اهمیت بهروزرسانی و انعطافپذیری قراردادها برای APIها در زمینههای فناوری میپردازد. روشهای سنتی تنظیم دستی قراردادها اغلب باعث ایجاد توافقنامههای شکنندهای میشود که با تغییرات APIها سازگار نیست. در این مقاله، روشی نوآورانه معرفی میشود که در آن قراردادها میتوانند از ترافیک واقعی API بهطور خودکار استنباط و بهروزرسانی شوند. این روش که با استفاده از دادههای واقعی ترافیک تولید میشود، باعث میشود که قراردادها دقیقاً با وضعیت فعلی APIها همخوانی داشته باشند و به نیازهای جدید بهطور موثر پاسخ دهند.
🟣لینک مقاله:
https://golangweekly.com/link/171560/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Effortless Go Contract Testing: Inferred Automatically From Traffic
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته، به اهمیت بهروزرسانی و انعطافپذیری قراردادها برای APIها در زمینههای فناوری میپردازد. روشهای سنتی تنظیم دستی قراردادها اغلب باعث ایجاد توافقنامههای شکنندهای میشود که با تغییرات APIها سازگار نیست. در این مقاله، روشی نوآورانه معرفی میشود که در آن قراردادها میتوانند از ترافیک واقعی API بهطور خودکار استنباط و بهروزرسانی شوند. این روش که با استفاده از دادههای واقعی ترافیک تولید میشود، باعث میشود که قراردادها دقیقاً با وضعیت فعلی APIها همخوانی داشته باشند و به نیازهای جدید بهطور موثر پاسخ دهند.
🟣لینک مقاله:
https://golangweekly.com/link/171560/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Signadot
Let Systems Do the Work: A New Approach to Contract Testing
A smarter, low-maintenance approach to contract testing that catches real API issues before they hit production.
چجوری یه فریمورک ماژولار برای بالا آوردن سرویسهای بکاند طراحی کردم؟
من توی پست قبلیم اشاره کردم که یه فریمورکی برای زبان Golang نوشتم که به توسعهدهندهها کمک میکنه که سرویسهای بکاندشون رو توی چند ثانیه بالا بیارن.
خواستم بیشتر درباره معماریش و طراحی این فریمورک صحبت کنم.
خب اول از همه مشکلی که میخواستم با ساخت این فریمورک حل کنم این بود که تقریبا هر سری پروژههایی که میساختم یه سری کارهای تکراری داشت مثل:
راهاندازی HTTP Server
ساخت connectionهای دیتابیس
نوشتن دستی routeها
پیادهسازی CRUD برای هر entity
پیادهسازی Pagination و filter و sort
چون به نظرم میومد که این مراحل اکثراً ثابت هستن، خواستم یه جورایی این مراحل رو حذف کنم. با توجه به این مسئله، سعی کردم که یه طراحی ماژولار واسه این فریمورک در نظر بگیرم.
اولین بخش core :
همونطور که از اسمش معلومه، هسته مرکزی برنامهست و عملاً لایفسایکل برنامه رو مدیریت میکنه.
توابعی که برای رجیستر کردن HTTP Server و دیتابیس و entityها هستن، در واقع توی این بخش قرار دارن.
بعد از اون ماژول crud:
ماژولیه که handlerها و routeهامون رو داخلش تعریف شده. handlerها، همون handlerهای ثابتی هستن که برای هر entity داره تعریف میشه.
موارد مختلفی مثل اینکه چجوری باید با query parameterها رفتار بشه و hook های قبل و بعد از عملیات CRUD هم اینجا تعریف شدن.
رجیستر شدن routeها هم داخل routes داره اتفاق میافته.
سومین بخش ماژول HTTP هستش که دو تا اینترفیس اصلی داره:
یکی برای مدیریت کردن contextها
یکی برای مدیریت کردن خود HTTP Server (initialize کردن، رجیستر کردن routeها، استفاده از middlewareها، و در نهایت start کردن HTTP Server) که اگه بخوایم از HTTP Server استفاده کنیم، باید این اینترفیسها پیادهسازی شده باشن.
مورد چهارم database :
این بخش هم یه اینترفیس اصلی داره برای انجام عملیات CRUD.
هر دیتابیسی بخوایم استفاده کنیم، باید این اینترفیس رو پیادهسازی کرده باشه حتماً.
ماژول آخر هم hooks در نظر گرفتم.
شامل اینترفیسهایی میشه که قبل و بعد یه عملیات رو تعریف میکنن.
برای مثال:
اگه میخواید یه ولیدیشن روی یکی از فیلدهاتون قبل از ایجاد شدنش توی دیتابیس داشته باشید، برای همون entityتون اینترفیس BeforeCreate رو پیادهسازی میکنید و این ولیدیشن قبل از insert شدن انجام میشه.
سعی کردم خیلی خلاصه توضیح بدم. خوشحال میشم نظرتون رو درباره این معماری بدونم و اگر دوست داشتید یه سر به گیتهاب پروژه بزنید:
https://github.com/Lumicrate/gompose
<Iman Asgari/>
من توی پست قبلیم اشاره کردم که یه فریمورکی برای زبان Golang نوشتم که به توسعهدهندهها کمک میکنه که سرویسهای بکاندشون رو توی چند ثانیه بالا بیارن.
خواستم بیشتر درباره معماریش و طراحی این فریمورک صحبت کنم.
خب اول از همه مشکلی که میخواستم با ساخت این فریمورک حل کنم این بود که تقریبا هر سری پروژههایی که میساختم یه سری کارهای تکراری داشت مثل:
راهاندازی HTTP Server
ساخت connectionهای دیتابیس
نوشتن دستی routeها
پیادهسازی CRUD برای هر entity
پیادهسازی Pagination و filter و sort
چون به نظرم میومد که این مراحل اکثراً ثابت هستن، خواستم یه جورایی این مراحل رو حذف کنم. با توجه به این مسئله، سعی کردم که یه طراحی ماژولار واسه این فریمورک در نظر بگیرم.
اولین بخش core :
همونطور که از اسمش معلومه، هسته مرکزی برنامهست و عملاً لایفسایکل برنامه رو مدیریت میکنه.
توابعی که برای رجیستر کردن HTTP Server و دیتابیس و entityها هستن، در واقع توی این بخش قرار دارن.
بعد از اون ماژول crud:
ماژولیه که handlerها و routeهامون رو داخلش تعریف شده. handlerها، همون handlerهای ثابتی هستن که برای هر entity داره تعریف میشه.
موارد مختلفی مثل اینکه چجوری باید با query parameterها رفتار بشه و hook های قبل و بعد از عملیات CRUD هم اینجا تعریف شدن.
رجیستر شدن routeها هم داخل routes داره اتفاق میافته.
سومین بخش ماژول HTTP هستش که دو تا اینترفیس اصلی داره:
یکی برای مدیریت کردن contextها
یکی برای مدیریت کردن خود HTTP Server (initialize کردن، رجیستر کردن routeها، استفاده از middlewareها، و در نهایت start کردن HTTP Server) که اگه بخوایم از HTTP Server استفاده کنیم، باید این اینترفیسها پیادهسازی شده باشن.
مورد چهارم database :
این بخش هم یه اینترفیس اصلی داره برای انجام عملیات CRUD.
هر دیتابیسی بخوایم استفاده کنیم، باید این اینترفیس رو پیادهسازی کرده باشه حتماً.
ماژول آخر هم hooks در نظر گرفتم.
شامل اینترفیسهایی میشه که قبل و بعد یه عملیات رو تعریف میکنن.
برای مثال:
اگه میخواید یه ولیدیشن روی یکی از فیلدهاتون قبل از ایجاد شدنش توی دیتابیس داشته باشید، برای همون entityتون اینترفیس BeforeCreate رو پیادهسازی میکنید و این ولیدیشن قبل از insert شدن انجام میشه.
سعی کردم خیلی خلاصه توضیح بدم. خوشحال میشم نظرتون رو درباره این معماری بدونم و اگر دوست داشتید یه سر به گیتهاب پروژه بزنید:
https://github.com/Lumicrate/gompose
<Iman Asgari/>
👍4❤1🔥1🍾1 1
🔵 عنوان مقاله
Generic Interfaces
🟢 خلاصه مقاله:
در این مقاله، اکسل ایدهای که رابطها مانند سایر انواع، میتوانند پارامترهای نوع داشته باشند را مطرح میکند. او نشان میدهد که چگونه این امر به نوشتن یک پیادهسازی اصلی درخت جستجوی دودویی کمک میکند که میتواند مقایسههای داخلی، مبتنی بر کالبک یا متد را پشتیبانی کند. اکسل در ادامه به مفاهیم عمیقتری میپردازد و نشان میدهد که چگونه این رویکرد میتواند توسعه نرمافزار را بهبود بخشد.
🟣لینک مقاله:
https://golangweekly.com/link/171544/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Generic Interfaces
🟢 خلاصه مقاله:
در این مقاله، اکسل ایدهای که رابطها مانند سایر انواع، میتوانند پارامترهای نوع داشته باشند را مطرح میکند. او نشان میدهد که چگونه این امر به نوشتن یک پیادهسازی اصلی درخت جستجوی دودویی کمک میکند که میتواند مقایسههای داخلی، مبتنی بر کالبک یا متد را پشتیبانی کند. اکسل در ادامه به مفاهیم عمیقتری میپردازد و نشان میدهد که چگونه این رویکرد میتواند توسعه نرمافزار را بهبود بخشد.
🟣لینک مقاله:
https://golangweekly.com/link/171544/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go.dev
Generic interfaces - The Go Programming Language
Adding type parameters to interface types is surprisingly powerful
❤1
🔵 عنوان مقاله
Serving 200 Million Requests Per Day with cgi-bin
🟢 خلاصه مقاله:
در ابتدای تاریخچه وب، روش CGI به عنوان یکی از روشهای اصلی برای ایجاد محتوای پویا استفاده میشد که در آن، درخواستهای HTTP یک فرایند در پشتصحنه سرور را فعال میکردند و نتیجه را برمیگرداندند. با پیشرفت وب، جایگاه CGI توسط برنامههای دائمیالاجرا که بدون قطع و وصل شدن به فرایندها پاسخ به درخواستها را مدیریت میکنند، تغییر کرد. با این حال، با توجه به افزایش سرعت زبانهای برنامهنویسی مانند Go، مطرح میشود که آیا CGI میتواند دوباره مورد استفاده قرار گیرد. به رغم بهبود سرعت در اجرای فرایندها، استفاده مجدد از CGI در عصر فناوریهای پیشرفتهتر ممکن است کاربردی نباشد زیرا نیازهای نوین وباپلیکیشنها با تکنولوژیهای جدید بهتر پاسخ داده میشوند.
🟣لینک مقاله:
https://golangweekly.com/link/171549/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Serving 200 Million Requests Per Day with cgi-bin
🟢 خلاصه مقاله:
در ابتدای تاریخچه وب، روش CGI به عنوان یکی از روشهای اصلی برای ایجاد محتوای پویا استفاده میشد که در آن، درخواستهای HTTP یک فرایند در پشتصحنه سرور را فعال میکردند و نتیجه را برمیگرداندند. با پیشرفت وب، جایگاه CGI توسط برنامههای دائمیالاجرا که بدون قطع و وصل شدن به فرایندها پاسخ به درخواستها را مدیریت میکنند، تغییر کرد. با این حال، با توجه به افزایش سرعت زبانهای برنامهنویسی مانند Go، مطرح میشود که آیا CGI میتواند دوباره مورد استفاده قرار گیرد. به رغم بهبود سرعت در اجرای فرایندها، استفاده مجدد از CGI در عصر فناوریهای پیشرفتهتر ممکن است کاربردی نباشد زیرا نیازهای نوین وباپلیکیشنها با تکنولوژیهای جدید بهتر پاسخ داده میشوند.
🟣لینک مقاله:
https://golangweekly.com/link/171549/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Jake Gold
Serving 200 million requests per day with a cgi-bin
In the early 2000s, we used to write a lot of CGI programs.
This was the primary way to make websites dynamic at the time. These CGI programs were usually written in Perl, but sometimes in C to increase performance.
The CGI mechanism is conceptually simple…
This was the primary way to make websites dynamic at the time. These CGI programs were usually written in Perl, but sometimes in C to increase performance.
The CGI mechanism is conceptually simple…
🔥1🕊1
Forwarded from Software Engineer Labdon
جی آی تی JIT یعنی چی؟
در اصل JIT مخفف Just-In-Time compilation هست، یعنی کامپایل همزمان با اجرا. این تکنیک باعث میشه که کدهایی که به صورت معمول تفسیر (interpret) میشن (مثل PHP یا JavaScript)، در زمان اجرا به کد ماشین تبدیل بشن، و این یعنی اجراشون خیلی سریعتر بشه.
مزایای JIT
- سرعت اجرای بهتر
- کاهش مصرف منابع در برخی سناریوها
- عملکرد نزدیکتر به زبانهای کامپایلشده (مثل C)
کار JIT در PHP چیه؟
در PHP 8 به بعد، Zend Engine دارای یک JIT Compiler شد. قبل از اون، PHP فقط تفسیر میکرد.
کار JIT باعث میشه:
بخشهایی از کد که زیاد استفاده میشن (مثلاً حلقهها یا توابع پرتکرار)، به کد ماشین واقعی تبدیل بشن.
این باعث افزایش سرعت اجرای برنامهها میشه، مخصوصاً در کارهای محاسباتی سنگین مثل:
- پردازش تصویر
- بازیسازی
- پروژههای علمی
- کدهایی که زیاد اجرا میشن مثل فریمورکها یا CMSها
<Milwad Khosravi/>
در اصل JIT مخفف Just-In-Time compilation هست، یعنی کامپایل همزمان با اجرا. این تکنیک باعث میشه که کدهایی که به صورت معمول تفسیر (interpret) میشن (مثل PHP یا JavaScript)، در زمان اجرا به کد ماشین تبدیل بشن، و این یعنی اجراشون خیلی سریعتر بشه.
مزایای JIT
- سرعت اجرای بهتر
- کاهش مصرف منابع در برخی سناریوها
- عملکرد نزدیکتر به زبانهای کامپایلشده (مثل C)
کار JIT در PHP چیه؟
در PHP 8 به بعد، Zend Engine دارای یک JIT Compiler شد. قبل از اون، PHP فقط تفسیر میکرد.
کار JIT باعث میشه:
بخشهایی از کد که زیاد استفاده میشن (مثلاً حلقهها یا توابع پرتکرار)، به کد ماشین واقعی تبدیل بشن.
این باعث افزایش سرعت اجرای برنامهها میشه، مخصوصاً در کارهای محاسباتی سنگین مثل:
- پردازش تصویر
- بازیسازی
- پروژههای علمی
- کدهایی که زیاد اجرا میشن مثل فریمورکها یا CMSها
<Milwad Khosravi/>
❤3
Forwarded from AI Labdon
پایان کدنویسی سنتی؛ ۲ ابزار هوش مصنوعی که توسعه را از چند روز به چند ساعت میرسانند
شرکت *پرپلکسیتی* استفاده از ابزارهای کدنویسی هوش مصنوعی مانند *گیتهاب کوپایلت* و *Cursor* را برای تمام مهندسانش اجباری کرد. آراویند سرینیواسان، مدیرعامل این شرکت، اعلام کرد که این ابزارها زمان توسعه و نمونهسازی را از چند روز به کمتر از یک ساعت کاهش دادهاند.
این تحول تنها به پرپلکسیتی محدود نیست؛ شرکتهای بزرگی مانند ویزا و ردیت نیز اکنون در آگهیهای استخدامی خود، آشنایی با این ابزارها را الزامی میدانند. نظرسنجیها نشان میدهد ۹۰ درصد تیمهای توسعه از هوش مصنوعی استفاده میکنند که نسبت به سال گذشته افزایش چشمگیری داشته است.
البته این فناوری بینقص نیست و گاهی باعث ایجاد باگهای جدید میشود، اما مزیت سرعت همچنان بر این چالشها برتری دارد.
#هوش_مصنوعی #برنامه_نویسی
💡 تحول دنیای برنامهنویسی را در زومیت بخوانید
شرکت *پرپلکسیتی* استفاده از ابزارهای کدنویسی هوش مصنوعی مانند *گیتهاب کوپایلت* و *Cursor* را برای تمام مهندسانش اجباری کرد. آراویند سرینیواسان، مدیرعامل این شرکت، اعلام کرد که این ابزارها زمان توسعه و نمونهسازی را از چند روز به کمتر از یک ساعت کاهش دادهاند.
این تحول تنها به پرپلکسیتی محدود نیست؛ شرکتهای بزرگی مانند ویزا و ردیت نیز اکنون در آگهیهای استخدامی خود، آشنایی با این ابزارها را الزامی میدانند. نظرسنجیها نشان میدهد ۹۰ درصد تیمهای توسعه از هوش مصنوعی استفاده میکنند که نسبت به سال گذشته افزایش چشمگیری داشته است.
البته این فناوری بینقص نیست و گاهی باعث ایجاد باگهای جدید میشود، اما مزیت سرعت همچنان بر این چالشها برتری دارد.
#هوش_مصنوعی #برنامه_نویسی
💡 تحول دنیای برنامهنویسی را در زومیت بخوانید
زومیت
انقلاب در کدنویسی؛ ۲ ابزاری که زمان توسعه را از چند روز به چند ساعت کاهش میدهند
وقتی کدنویسی از چند روز به چند ساعت کاهش پیدا کند، چه چیزی در پشت صحنه درحال رخ دادن است؟
❤5
بیشترین سوالات مصاحبه String + Array
String-Based Questions
1. Reverse a string — without using built-ins.
2. Is it a palindrome? Let's find out.
3. Remove duplicates from a string — efficiently.
4. First non-repeating character — who stands alone?
5. Count how many times each character appears.
6. Flip the words in a sentence, not the letters.
7. Are two strings anagrams? Prove it.
8. Longest substring without repeats — sliding window style.
9. Build your own atoi — string to integer.
10. Compress strings with run-length encoding.
11. Most frequent character — who dominates?
12. List all possible substrings of a string.
13. Is one string a rotation of another?
14. Strip all white spaces from a string.
15. Is this a valid shuffle of two strings?
16. Convert text to Title Case — properly.
17. Find the longest common prefix among words.
18. Break a string into a char array — without confusion.
19. Replace spaces with %20 — classic URL trick.
20. Turn full sentences into acronyms.
21. Check if the string is all digits — no alphabets allowed.
22. Count how many words are in the string.
23. Remove a specific character — cleanly.
24. Find the shortest word in a sentence.
25. Longest palindromic substring — two-pointer style.
Array-Based Questions
26. Reverse an array in-place.
27. Find the largest and smallest element.
28. Check for duplicates in an array.
29. Remove duplicates — return only unique values.
30. Find the missing number from 1 to N.
31. Move all zeros to the end — keep order.
32. Rotate the array left/right by K positions.
33. Find the Kth largest/smallest element.
34. Merge two sorted arrays — without using extra space.
35. Find the intersection of two arrays.
36. Sort 0s, 1s, and 2s without using sort().
37. Find subarrays with a given sum.
38. Detect if a subarray sums to 0.
39. Find the longest increasing subsequence.
40. Kadane’s Algorithm — maximum subarray sum.
41. Check if array is sorted and rotated.
42. Rearrange array in max-min order alternately.
43. Find leaders in an array (no greater element to the right).
44. Calculate frequency of all elements in O(n).
45. Product of all elements except self.
#تجربه
webinar_farsi
String-Based Questions
1. Reverse a string — without using built-ins.
2. Is it a palindrome? Let's find out.
3. Remove duplicates from a string — efficiently.
4. First non-repeating character — who stands alone?
5. Count how many times each character appears.
6. Flip the words in a sentence, not the letters.
7. Are two strings anagrams? Prove it.
8. Longest substring without repeats — sliding window style.
9. Build your own atoi — string to integer.
10. Compress strings with run-length encoding.
11. Most frequent character — who dominates?
12. List all possible substrings of a string.
13. Is one string a rotation of another?
14. Strip all white spaces from a string.
15. Is this a valid shuffle of two strings?
16. Convert text to Title Case — properly.
17. Find the longest common prefix among words.
18. Break a string into a char array — without confusion.
19. Replace spaces with %20 — classic URL trick.
20. Turn full sentences into acronyms.
21. Check if the string is all digits — no alphabets allowed.
22. Count how many words are in the string.
23. Remove a specific character — cleanly.
24. Find the shortest word in a sentence.
25. Longest palindromic substring — two-pointer style.
Array-Based Questions
26. Reverse an array in-place.
27. Find the largest and smallest element.
28. Check for duplicates in an array.
29. Remove duplicates — return only unique values.
30. Find the missing number from 1 to N.
31. Move all zeros to the end — keep order.
32. Rotate the array left/right by K positions.
33. Find the Kth largest/smallest element.
34. Merge two sorted arrays — without using extra space.
35. Find the intersection of two arrays.
36. Sort 0s, 1s, and 2s without using sort().
37. Find subarrays with a given sum.
38. Detect if a subarray sums to 0.
39. Find the longest increasing subsequence.
40. Kadane’s Algorithm — maximum subarray sum.
41. Check if array is sorted and rotated.
42. Rearrange array in max-min order alternately.
43. Find leaders in an array (no greater element to the right).
44. Calculate frequency of all elements in O(n).
45. Product of all elements except self.
#تجربه
webinar_farsi
❤6