Gopher Academy
3.33K subscribers
915 photos
40 videos
279 files
1.96K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔴قابلیت sync.WaitGroup ویژگی های جدید گولنگ نسخه 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.
👍43🔥3🎉1
Forwarded from Software Engineer Labdon
فهرستی ارزشمند برای برنامه‌نویسان حرفه‌ای. مناسب برای توسعه‌دهندگان بک‌اند، فرانت‌اند، دواپس و برنامه‌نویسان عمومی.

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
👍1
🔴قابلیت 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` معرفی شده که به شکل زیر تعریف می‌شود:

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
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
🔥2
🔵 عنوان مقاله
Minimock: A Tool to Generate Mocks from Interface Declarations

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

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

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


👑 @gopher_academy
2
🔴قابلیت 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
🔴قابلیت 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
Forwarded from 𓄂 Bardia 𓆃
🍾5👍3🕊2
🔵 عنوان مقاله
go-ytdlp: yt-dlp CLI Bindings for Go

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

yt-dlp یک ابزار دانلود چندرسانه‌ای محبوب است که نه تنها برای یوتیوب بلکه برای صدها پلتفرم دیگر کاربرد دارد. این ابزار به کاربران امکان می‌دهد تا به راحتی محتوای صوتی و تصویری را از وب‌سایت‌های مختلف دانلود کنند و از ویژگی‌هایی نظیر انتخاب کیفیت ویدئو، استخراج صدا از ویدئوها، دانلود لیست‌ پخش کامل، و مدیریت پخش زنده بهره‌مند است. این ابزار، که توسط جامعه‌ای از توسعه‌دهندگان به طور مداوم به‌روزرسانی می‌شود، در بین کاربرانی که به دنبال دانلود محتوا هستند بسیار محبوب و کارآمد شناخته شده است.

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


👑 @gopher_academy
3👍3
🔵 عنوان مقاله
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`. این‌ها به شما اجازه می‌دهند **اتریبیوت‌های دلخواه (کلید–مقدار) را مستقیماً به خروجی لاگ تست ارسال کنید.

---

🏷 چه کاری انجام می‌دهند؟

با استفاده از 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
▫️▪️▫️▪️▫️▪️▫️▪️▫️
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
🔥1
Forwarded from 𓄂 Bardia 𓆃
پاول دروف : اگه دانش‌آموزی و نمی‌دونی رو چی تمرکز کنی، برو سراغ ریاضی!

▪️ریاضی بهت یاد می‌ده که به مغز خودت تکیه کنی، منطقی فکر کنی، مسئله رو خرد کنی و قدم‌به‌قدم درست پیش بری.

▪️و این دقیقاً همون مهارتیه که برای ساختن شرکت، راه انداختن پروژه و موفقیت تو هر کاری لازمه!
👍9
🔵 عنوان مقاله
🕹️ GORE: A Pure Go Minimal 'Doom' Implementation

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

چند ماه پیش، پروژه‌ای جالب توجه دوستداران برنامه‌نویسی و بازی‌های کامپیوتری را به خود جلب کرد که شامل تبدیل نسخه اصلی بازی دوم از سال ١٩٩٣ به زبان برنامه‌نویسی گو بود. هدف از این پروژه تنها بازسازی بازی به زبان دیگر نبود، بلکه بهبود ساختار و کارایی کلی آن نیز در نظر گرفته شده بود. این تغییرات باعث شده بازی بدون نیاز به تنظیمات خاص پلتفرمی، روی سیستم‌ها و دستگاه‌های مختلف به خوبی اجرا شود. یکی از جنبه‌های نوآورانه این پروژه، امکان اجرای بازی مستقیماً روی ترمینال است که نشان‌دهنده توانایی زبان گو در ارائه خروجی‌های گرافیکی پیچیده در محیطی ساده است. این پروژه نه تنها زندگی جدیدی به یک اثر تاریخی در فرهنگ بازی‌های ویدئویی می‌بخشد، بلکه امکان بازسازی بازی‌های قدیمی دیگر را در محیط‌های نرم‌افزاری معاصر فراهم می‌کند.

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


👑 @gopher_academy
3
Forwarded from AI Labdon
🔴انتقال 100 میلیون کتاب در 7 دقیقه؟!
یه دانشمند ایرانی داره آینده‌ی اینترنت رو بازنویسی می‌کنه...

▪️تو دنیایی که هوش مصنوعی داره مغز دنیا می‌شه، یه مشکل بزرگ داریم: مصرف وحشتناک انرژی در دیتاسنترها.
اما حالا دکتر علیرضا گراوند از دانشگاه لاوال کانادا، با ساخت یه تراشه نوری فوق‌پیشرفته ورق رو برگردونده.

▪️این تراشه به نازکی یه تار موئه، ولی قدرتش؟ باورنکردنیه:

⚡️ ۱ ترابیت‌ بر ثانیه سرعت انتقال داده
⚡️ ۲۰ برابر سریع‌تر از تکنولوژی‌های رایج
⚡️ مصرف انرژی فوق‌العاده پایین
⚡️ طراحی‌شده مخصوص مراکز هوش مصنوعی

📚 فقط تصور کن: این تراشه می‌تونه حجم ۱۰۰ میلیون کتاب رو در کمتر از ۷ دقیقه جابه‌جا کنه — فقط با نور، بدون جریان برق!
🔥42🕊2🍾1