میخوام یک وب سایت خیلی خوب برای گولنگ بهتون معرفی کنم، https://awesome-go.com/
این وب سایت فوق العادس برای دیدن کد تو هر موضوعی که فکرشو کنید در کانکارنسی، CLI، وب و هرچیز دیگه ای.
کافیه برین داخلش عنوان ابزار، کتابخونه یا حتی نمونه کد مورد نظر خودتون رو پیدا کنید و ریپازیتوری اوپن سورس مرتبطش رو باز کنید و داکیومنشن یا کدش رو بخونید.
واقعا جذابه پیشنهاد میکنم حتما ببینید
<Abolfazl Alizadeh/>
این وب سایت فوق العادس برای دیدن کد تو هر موضوعی که فکرشو کنید در کانکارنسی، CLI، وب و هرچیز دیگه ای.
کافیه برین داخلش عنوان ابزار، کتابخونه یا حتی نمونه کد مورد نظر خودتون رو پیدا کنید و ریپازیتوری اوپن سورس مرتبطش رو باز کنید و داکیومنشن یا کدش رو بخونید.
واقعا جذابه پیشنهاد میکنم حتما ببینید
<Abolfazl Alizadeh/>
Awesome-Go
A curated list of awesome Go frameworks, libraries and software - Awesome Go
A curated list of awesome #Golang frameworks, libraries and software
❤3 3
🔵 عنوان مقاله
Building Conway’s Game of Life with raylib-go
🟢 خلاصه مقاله:
یک پروژه تفننی و آموزشی است: پیادهسازی Conway’s Game of Life با استفاده از raylib-go در Go. برنامه یک پنجره باز میکند، شبکهای دوبعدی از سلولها میسازد و هر فریم سلولهای زنده و مرده را بهصورت مستطیلهای رنگی رسم میکند. قوانین استاندارد (شمارش ۸ همسایه و اعمال قوانین کمجمعیتی، بقا، تراکم و تولیدمثل) با double-buffering اجرا میشوند تا محاسبات نسل بعدی تمیز و قابل اتکا باشد و در صورت نیاز امکان دورپیچی مرزها هم در نظر گرفته شده است. تعاملها شامل توقف/ادامه، گامبهگام، تنظیم سرعت، پاکسازی یا تصادفیسازی صفحه و تغییر وضعیت سلولها با کلیک ماوس است؛ ذخیره/بارگذاری الگوهای ساده هم قابل افزودن است. حلقه بهروزرسانی مستقل از نرخ رندر زمانبندی میشود تا اجرای روان و کارآمد حفظ شود و روی Windows، macOS و Linux بهخوبی اجرا میشود. کد نهایی ارائه شده و برای توسعه ایدههایی مانند کتابخانه الگوها، کنترلهای بهتر زوم/پن، گرادیانرنگ بر اساس سن سلول و ارزیابی عملکرد قابل گسترش است.
#ConwaysGameOfLife #raylib #raylibgo #Go #GameDev #CellularAutomata #GraphicsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/174642/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Building Conway’s Game of Life with raylib-go
🟢 خلاصه مقاله:
یک پروژه تفننی و آموزشی است: پیادهسازی Conway’s Game of Life با استفاده از raylib-go در Go. برنامه یک پنجره باز میکند، شبکهای دوبعدی از سلولها میسازد و هر فریم سلولهای زنده و مرده را بهصورت مستطیلهای رنگی رسم میکند. قوانین استاندارد (شمارش ۸ همسایه و اعمال قوانین کمجمعیتی، بقا، تراکم و تولیدمثل) با double-buffering اجرا میشوند تا محاسبات نسل بعدی تمیز و قابل اتکا باشد و در صورت نیاز امکان دورپیچی مرزها هم در نظر گرفته شده است. تعاملها شامل توقف/ادامه، گامبهگام، تنظیم سرعت، پاکسازی یا تصادفیسازی صفحه و تغییر وضعیت سلولها با کلیک ماوس است؛ ذخیره/بارگذاری الگوهای ساده هم قابل افزودن است. حلقه بهروزرسانی مستقل از نرخ رندر زمانبندی میشود تا اجرای روان و کارآمد حفظ شود و روی Windows، macOS و Linux بهخوبی اجرا میشود. کد نهایی ارائه شده و برای توسعه ایدههایی مانند کتابخانه الگوها، کنترلهای بهتر زوم/پن، گرادیانرنگ بر اساس سن سلول و ارزیابی عملکرد قابل گسترش است.
#ConwaysGameOfLife #raylib #raylibgo #Go #GameDev #CellularAutomata #GraphicsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/174642/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
packagemain.tech
Building Conway’s Game of Life in Go with raylib-go
A step-by-step tutorial on building Conway’s Game of Life in Go, using raylib-go for graphics. Learn how to draw grids, apply the rules of life, and simulate evolving patterns.
❤1
مشکل "mutex copying" در Go یعنی کپی کردن یک mutex به جای استفاده از pointer به آن. این کار باعث میشه که mutex اصلی و کپی شده دو شیء جداگانه بشن و قفلگذاری درست کار نکنه.
چرا مشکل ساز است؟
وقتی یک mutex رو کپی میکنی، حالت داخلی اش (locked/unlocked) کپی نمیشه به درستی و هر کدوم مستقل عمل میکنن. این یعنی race condition و عدم هماهنگی بین goroutine ها.
1. همیشه از pointer receiver استفاده کن وقتی mutex داری:
2. هرگز mutex رو به صورت value پاس نده:
3. ا Go vet ابزار خوبیه که این مشکل رو پیدا میکنه:
4. اگه struct رو embed میکنی**، حواست باشه که اون رو کپی نکنی
5. **انواع Mutex ها همه این مشکل رو دارن:
این یکی از رایجترین اشتباهات تو Go هست، خصوصا برای کسایی که تازه شروع کردن!
چرا مشکل ساز است؟
وقتی یک mutex رو کپی میکنی، حالت داخلی اش (locked/unlocked) کپی نمیشه به درستی و هر کدوم مستقل عمل میکنن. این یعنی race condition و عدم هماهنگی بین goroutine ها.
1. همیشه از pointer receiver استفاده کن وقتی mutex داری:
func (c *Counter) method()
2. هرگز mutex رو به صورت value پاس نده:
func badFunc(mu sync.Mutex)
3. ا Go vet ابزار خوبیه که این مشکل رو پیدا میکنه:
go vet ./...
4. اگه struct رو embed میکنی**، حواست باشه که اون رو کپی نکنی
5. **انواع Mutex ها همه این مشکل رو دارن:
sync.Mutex
, sync.RWMutex
,
sync.WaitGroup
, sync.Cond
این یکی از رایجترین اشتباهات تو Go هست، خصوصا برای کسایی که تازه شروع کردن!
❤2👍1
Gopher Academy
مشکل "mutex copying" در Go یعنی کپی کردن یک mutex به جای استفاده از pointer به آن. این کار باعث میشه که mutex اصلی و کپی شده دو شیء جداگانه بشن و قفلگذاری درست کار نکنه. چرا مشکل ساز است؟ وقتی یک mutex رو کپی میکنی، حالت داخلی اش (locked/unlocked) کپی…
💙نمونه استفاده درست👇
package main
import (
"fmt"
"sync"
"time"
)
type Counter struct {
mu sync.Mutex
value int
}
func (c *Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.value++
fmt.Printf("Value: %d\n", c.value)
}
func goodFunction(c *Counter) {
c.mu.Lock()
defer c.mu.Unlock()
c.value = 100
}
func main() {
counter := &Counter{}
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
counter.Increment()
}()
}
wg.Add(1)
go func() {
defer wg.Done()
goodFunction(counter)
}()
wg.Wait()
fmt.Printf("Final value: %d\n", counter.value)
}
type SafeMap struct {
mu sync.RWMutex
data map[string]int
}
func NewSafeMap() *SafeMap {
return &SafeMap{
data: make(map[string]int),
}
}
func (sm *SafeMap) Set(key string, value int) {
sm.mu.Lock()
defer sm.mu.Unlock()
sm.data[key] = value
}
func (sm *SafeMap) Get(key string) (int, bool) {
sm.mu.RLock()
defer sm.mu.RUnlock()
val, ok := sm.data[key]
return val, ok
}
🏆1
Gopher Academy
مشکل "mutex copying" در Go یعنی کپی کردن یک mutex به جای استفاده از pointer به آن. این کار باعث میشه که mutex اصلی و کپی شده دو شیء جداگانه بشن و قفلگذاری درست کار نکنه. چرا مشکل ساز است؟ وقتی یک mutex رو کپی میکنی، حالت داخلی اش (locked/unlocked) کپی…
❤️نمونه اشتباه
package main
import (
"fmt"
"sync"
"time"
)
type Counter struct {
mu sync.Mutex
value int
}
func (c Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.value++
fmt.Printf("Value: %d\n", c.value)
}
func badFunction(c Counter) {
c.mu.Lock()
defer c.mu.Unlock()
c.value = 100
}
func main() {
counter := Counter{}
for i := 0; i < 5; i++ {
go counter.Increment()
}
go badFunction(counter)
time.Sleep(time.Second)
fmt.Printf("Final value: %d\n", counter.value)
}
❤1
Forwarded from VIP
🚀 به دنیای توسعه و تکنولوژی خوش اومدی!
اگر به موضوعات زیر علاقهمندی:
🔹 Golang
🔹 Linux & DevOps
🔹 Software Engineering
🔹 AI & Machine Learning
🔹 فرصتهای شغلی ریموت (خارجی و داخلی)
ما برات یه مجموعه کانالهای تخصصی ساختیم تا همیشه بهروز، حرفهای و الهامبخش بمونی!
📚 یادگیری، فرصت، شبکهسازی و پیشرفت، همش اینجاست...
📌 از این لینک همه چنلهامونو یهجا ببین و جوین شو:
👉 https://t.iss.one/addlist/AJ7rh2IzIh02NTI0
اگر به موضوعات زیر علاقهمندی:
🔹 Golang
🔹 Linux & DevOps
🔹 Software Engineering
🔹 AI & Machine Learning
🔹 فرصتهای شغلی ریموت (خارجی و داخلی)
ما برات یه مجموعه کانالهای تخصصی ساختیم تا همیشه بهروز، حرفهای و الهامبخش بمونی!
📚 یادگیری، فرصت، شبکهسازی و پیشرفت، همش اینجاست...
📌 از این لینک همه چنلهامونو یهجا ببین و جوین شو:
👉 https://t.iss.one/addlist/AJ7rh2IzIh02NTI0
📢 اگر تلگرام پرمیوم دارید، کانال ما رو Boost کنید ! 🚀
با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙
https://t.iss.one/boost/gopher_academy
با Boost کردن کانال، به رشد و دیده شدن ما بیشتر کمک کنید💙
https://t.iss.one/boost/gopher_academy
❤1
Forwarded from Software Engineer Labdon
این کتاب خیلی ساده و روان توضیح میده چرا Rust اینقدر سر و صدا کرده و چرا خیلیها دارن سمتش میرن:
نشون میده چطوری با سیستم ownership و borrowing میشه حافظه رو بدون دردسر مدیریت کرد
توضیح میده چرا توی Rust باگهایی مثل null pointer یا data race کلاً از همون اول جلوی راهت سبز نمیشن
یاد میده چطوری میشه به راحتی برنامههای چندنخی و امن نوشت، بدون استرس خطاهای عجیب غریب
تأکید میکنه که همهی این امکانات رو میگیری، ولی سرعتش در حد C/C++ باقی میمونه
نشون میده چطوری با سیستم ownership و borrowing میشه حافظه رو بدون دردسر مدیریت کرد
توضیح میده چرا توی Rust باگهایی مثل null pointer یا data race کلاً از همون اول جلوی راهت سبز نمیشن
یاد میده چطوری میشه به راحتی برنامههای چندنخی و امن نوشت، بدون استرس خطاهای عجیب غریب
تأکید میکنه که همهی این امکانات رو میگیری، ولی سرعتش در حد C/C++ باقی میمونه
❤5 4