Gopher Academy
3.84K subscribers
933 photos
42 videos
280 files
2.22K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
on using JSON schemas in Go

🟢 خلاصه مقاله:
** این مقاله به مزایای استفاده از JSON Schema برای تعریف، اعتبارسنجی و مستندسازی داده‌های JSON در Go می‌پردازد و نشان می‌دهد چطور می‌توان این رویکرد را در یک جریان کاری «schema-first» به‌صورت عملی پیاده کرد. محور بحث، نگاشت دقیق قابلیت‌های JSON Schema به انواع ایستا در Go است؛ از چالش‌هایی مانند فیلدهای اختیاری، additionalProperties، enumها، nullability و ترکیب‌گرهایی مثل oneOf/anyOf/allOf تا تصمیم‌های طراحی میان رویکردهای مبتنی بر reflection در زمان اجرا و code generation در زمان ساخت. مقاله سپس به کار انجام‌شده در Google، به‌ویژه در مخزن google/jsonschema-go، اشاره می‌کند که هدفش ارائه نگاشت پایدار schematype، اعتبارسنجی سریع و گزارش خطای قابل اتکا است. در ادامه، مخزن ianlancetaylor/jsonschema نیز معرفی می‌شود و نقاط همگرایی و تفاوت‌های رویکردی آن بیان می‌گردد. در پایان، مسیرهای آینده مانند همگرایی بهتر با OpenAPI، تقویت codegen برای ویژگی‌های پیشرفته، راهبردهای تکامل schema و یکپارچگی عمیق‌تر با ابزارها مطرح می‌شود تا توسعه مبتنی بر Schema در Go هم قابل اتکا و هم خوش‌تجربه باشد.

#Go #JSONSchema #Google #golang #APIs #Validation #OpenSource

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


👑 @gopher_academy
👍1
🔵 عنوان مقاله
Go's Green Tea Garbage Collector

🟢 خلاصه مقاله:
** در Go 1.25 یک garbage collector آزمایشی به نام Green Tea معرفی شده که با هدف کاهش تأخیر و نوسان، بهبود کارایی و مصرف حافظه، و مقیاس‌پذیری بهتر ارائه می‌شود. این قابلیت فعلاً به‌صورت opt-in و از طریق فلگ‌های مستند در release notes فعال می‌شود و پیش‌فرض نیست. نتایج اولیه بسته به بار کاری می‌تواند متفاوت باشد؛ در صورت پسرفت می‌توان به GC فعلی بازگشت. تیم Go با تکیه بر بازخورد و سنجش میدانی، در نسخه‌های بعدی آن را بهبود می‌دهد و در صورت موفقیت، می‌تواند بر راهبرد آینده GC در Go اثر بگذارد.

#Go #Golang #GreenTea #GarbageCollection #Go125 #MemoryManagement #Performance #Runtime

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


👑 @gopher_academy
2
🔵 عنوان مقاله
Fyne: A GUI App Framework for Desktop, Mobile and Web

🟢 خلاصه مقاله:
**Fyne یک فریم‌ورک GUI برای Desktop، Mobile و Web است که با Go کار می‌کند و امکان ساخت اپ‌های بومی چندسکویی را بدون بسته‌بندی یک موتور کامل مرورگر فراهم می‌کند. این روش به باینری‌های کوچک‌تر، مصرف حافظه کمتر و تجربه‌ی بصری منسجم‌تر منجر می‌شود. نسخه‌های اخیر بهبودهای مهمی در i18n، قابلیت‌های canvas برای ترسیم و گزینه‌های styling ارائه کرده‌اند تا هم بومی‌سازی ساده‌تر شود و هم ظاهر و تم‌ها بهتر با استانداردهای هر پلتفرم و نیازهای برند هماهنگ شوند.

#Fyne #Go #GUI #CrossPlatform #MobileDevelopment #DesktopApps #i18n #OpenSource

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


👑 @gopher_academy
👍2🔥1
🎙️ عنوان پادکست:
An episode as short as the name of a unix command
خلاصه پادکست:
این اپیزود کوتاه به‌روزترین خبرها را پوشش می‌دهد: انتشار نسخه‌های Go 1.25.3 و 1.24.9، و مرور بلاگ Thea Heinen درباره‌ی کشف یک باگ در کامپایلر arm64 زبان Go. همچنین درباره‌ی پیشرفت پشتیبانی zsh و بهبودهای مرتبط با sh صحبت می‌شود، و خبر یک Go meetup و ضبط زنده اپیزود در San Francisco اعلام می‌گردد. در بخش Lightning، به qjs (یک JavaScript runtime مدرن و امن بدون CGO برای برنامه‌های Go) و Kaizen (تماشای انیمه از ترمینال) می‌پردازیم. در پایان از مخاطبان برای حمایت از پادکست در Patreon دعوت می‌شود.

#Go #Golang #arm64 #Unix #zsh #JavaScript #qjs #Podcast
👍1🔥1
🔵 عنوان مقاله
How We Saved 70% CPU and 60% Memory in Refinery’s Go Code

🟢 خلاصه مقاله:
**تیم Refinery روی یک سرویس مهم مبتنی بر Go با مصرف بالای CPU و Memory کار می‌کرد و با پروفایلینگ دقیق (pprof، tracing و بنچمارک‌های انتهابه‌انتها) گلوگاه‌های واقعی را پیدا کرد. بیشترین صرفه‌جویی با حذف کارهای غیرضروری به‌دست آمد: حذف پردازش‌ها و serialization تکراری، دوری از reflection در مسیرهای داغ، جایگزینی JSON در hot path با دسترسی مستقیم/کدگذاری ساده، پیش‌اختصاص slices/maps و بازاستفاده از بافرها برای کاهش allocation و فشار GC. در هم‌روندی، به‌جای goroutineهای بدون‌مهار، از worker poolهای محدود و backpressure استفاده شد، کارها batch و داده‌ها تا حد امکان stream شدند تا قفل‌زنی و جابه‌جایی زمینه کاهش یابد. همچنین چند حلقه O(n^2) با ایندکس‌گذاری مبتنی بر map/set جایگزین شد، نتایج گران با cache کردن تکرار نشد و الگوهای I/O با خواندن/نوشتن تجمیعی بهینه شدند. در نهایت با تکیه بر allocationهای روی stack، استفاده از sync.Pool و روش‌های zero-copy، نیاز به GC پایین آمد. نتیجه: حدود 70% کاهش مصرف CPU و 60% کاهش Memory همراه با بهبود تاخیرهای p95/p99. درس کلیدی: بهینه‌سازی اغلب یعنی کمتر کار کردن—اندازه‌گیری کن، کار زائد را حذف کن و ساده‌سازی را تکرار کن.

#Go #Golang #Performance #Profiling #CPU #Memory #Optimization #pprof

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


👑 @gopher_academy
👍21
🔵 عنوان مقاله
Concord: A Resilient Chord Implementation in Go

🟢 خلاصه مقاله:
اConcord یک پیاده‌سازی مقاوم از پروتکل Chord در زبان Go است که برای پایداری در برابر churn و خرابی‌های جزئی طراحی شده. Chord یک DHT همتابه‌همتاست که با استفاده از consistent hashing یک حلقه منطقی می‌سازد؛ هر گره بخشی از فضای کلید را نگه می‌دارد و با تکیه بر successor، predecessor و finger table، کلیدها را در زمان تقریبی O(log N) مسیردهی می‌کند.

تمرکز اصلی Concord بر مدیریت عضوگیری و بازیابی سریع است: پایش و stabilization دوره‌ای برای به‌روزرسانی اشاره‌گرها، استفاده از successor list برای تحمل خرابی، و تعمیر پس‌زمینه fingerها برای کاهش انحراف مسیریابی. جهت دوام داده، کلیدها روی چند successor تکرار می‌شوند و همگرایی نسخه‌ها با سیاست‌های ساده نسخه‌بندی یا last-writer-wins انجام می‌گیرد. تشخیص خرابی با زمان‌بندی‌ها و heartbeatهای اکتشافی تنظیم می‌شود تا بین حساسیت و خطای مثبت کاذب تعادل برقرار شود.

مدل هم‌زمانی Go پایه‌ی طراحی Concord است: goroutineها و channelها کارهای پروتکلی مانند stabilization، replication و رسیدگی به درخواست‌ها را جدا می‌کنند تا کندی یا خرابی یک همتا کل سیستم را متوقف نکند. ارتباطات RPC مرز روشنی بین گره‌ها ایجاد می‌کند و الگوهای backoff و circuit breaker از آبشاری‌شدن timeoutها جلوگیری می‌کنند. Concord همچنین به نیازهای عملیاتی مانند bootstrap گره‌های جدید، خروج ایمن، و توزیع مجدد کم‌اختلال کلیدها می‌پردازد.

نتایج آزمایش‌های churn، تزریق خطا و بنچمارک‌ها نشان می‌دهد که lookupها نزدیک به O(log N) باقی می‌مانند و در زمان خرابی‌های گذرا نرخ موفقیت بالایی دارند؛ در حالی‌که کارایی پایدار هم‌تراز Chord استاندارد و از نظر تاب‌آوری بهتر است. حاصل کار، یک DHT عملی مبتنی بر Go برای کاربردهایی مانند فراداده توزیع‌شده، service discovery و content indexing است.

#DistributedSystems #Chord #DHT #Go #P2P #FaultTolerance #ConsistentHashing #Scalability

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


👑 @gopher_academy
🔵 عنوان مقاله
Dependency Management in Database Design

🟢 خلاصه مقاله:
** مدیریت وابستگی‌ها در پروژه‌های بزرگ Go، به‌خصوص در موتورهای پایگاه‌داده، چالش‌زا است. مطالعه موردی Dolt (با ۷۶۲ هزار خط کد Go) نشان می‌دهد که لایه‌بندی دقیق، مرزبندی شفاف، و تکیه بر interfaceها به‌جای پیاده‌سازی‌های مستقیم، جلوی چرخه‌های import و کوپلینگ پنهان را می‌گیرد. استفاده از Go modules، نسخه‌بندی معنایی، internal packages و اجراهای خودکار در CI برای شناسایی چرخه‌ها و importهای ممنوع، سلامت نمودار وابستگی را حفظ می‌کند. راهبرد تست مبتنی بر mock/fake و تست‌های یکپارچه، هر لایه را مستقل قابل آزمون می‌کند و رگرسیون را کاهش می‌دهد. نتیجه این است که زیرسامانه‌هایی مانند ذخیره‌سازی، پرس‌وجو و تکرار در Dolt می‌توانند مستقل و با سرعت تکامل پیدا کنند، بدون آن‌که تغییرات به کل کدبیس سرایت کند.

#Go #Golang #DependencyManagement #ModularArchitecture #DatabaseSystems #Dolt #SoftwareArchitecture #Scalability

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


👑 @gopher_academy
🔵 عنوان مقاله
go-sqlite3: Go Bindings to SQLite Using Wazero

🟢 خلاصه مقاله:
این کتابخانه با نام go-sqlite3 امکان استفاده از SQLite در Go را بدون cgo فراهم می‌کند. هسته SQLite به‌صورت WebAssembly اجرا و درون runtimeِ wazero بارگذاری می‌شود، در حالی‌که رابطی سازگار با database/sql ارائه می‌دهد. نتیجه این است که بیشتر کدهای موجود مبتنی بر database/sql با کمترین تغییر کار می‌کنند و در عوض، مزایایی مثل باینری‌های کاملاً استاتیک، کراس‌کامپایل آسان، وابستگی‌های کمتر به سیستم‌عامل و استقرار ساده‌تر (به‌ویژه در کانتینر و Serverless) به دست می‌آید. اجرای SQLite داخل WebAssembly علاوه‌بر یک محیط ایزوله و قابل پیش‌بینی، ممکن است محدودیت‌هایی هم داشته باشد؛ از جمله عدم پشتیبانی برخی افزونه‌های بومی و کارایی پایین‌تر نسبت به نسخه‌های cgo. با این حال برای بسیاری از کاربردها مانند ابزارهای خط فرمان، سرویس‌های سبک، تست‌ها و محیط‌های ابری، این مبادله به‌خاطر قابل‌حمل بودن و سادگی عملیاتی ارزشمند است.

#Go #SQLite #WebAssembly #wazero #database_sql #cgo #GoBindings #Serverless

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


👑 @gopher_academy
1👍1
🔵 عنوان مقاله
switch Statements in Go

🟢 خلاصه مقاله:
این مطلب از Golang Weekly به‌صورت عملی سراغ عبارت‌های switch در Go می‌رود و نشان می‌دهد چگونه می‌توان به‌جای زنجیره‌های if/else طولانی، کدی خواناتر نوشت. ابتدا نحو و قواعد ارزیابی switch، استفاده از چند مقدار در یک case، نقش default، و این نکته که در Go سقوط خودکار بین caseها وجود ندارد و فقط با fallthrough فعال می‌شود، توضیح داده می‌شود. سپس فرم بدون تگِ switch { ... } برای نگارش نگهبان‌های منطقیِ مرتب معرفی می‌شود.

بخش بعدی به type switch اختصاص دارد: وقتی با interface سروکار دارید، switch روی v.(type) اجازه می‌دهد بر اساس نوع واقعی تصمیم بگیرید، از nil به‌درستی عبور کنید و محدوده متغیرها در سربرگ switch و داخل caseها را مدیریت کنید. مقاله الگوهای کاربردی مثل مسیردهی بر اساس روش HTTP، دسته‌بندی خطاها برحسب نوع، شاخه‌بندی زمان‌محور و استفاده از ثابت‌ها را مرور می‌کند و در کنار آن به نکات سبک و کارایی اشاره دارد. جمع‌بندی این است که با رعایت چند قاعده ساده و پرهیز از دام‌های متداول، switch در Go ابزاری شفاف، قابل نگهداری و گاه سریع‌تر از شرط‌های زنجیره‌ای خواهد بود.

#Go #Golang #GolangWeekly #switch #TypeSwitch #GoTips #Programming #Backend

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


👑 @gopher_academy
1
🔵 عنوان مقاله
Revisiting Interface Segregation in Go

🟢 خلاصه مقاله:
این مطلب «Interface Segregation Principle (ISP)» را از منظر Go مرور می‌کند: مشتری نباید به متدهایی وابسته شود که از آن‌ها استفاده نمی‌کند. در Go، راهکارهای رایج شامل ساختن رابط‌های کوچک و رفتاری، تعریف رابط‌ها در محل استفاده، «پذیرفتن interface و برگرداندن نوع‌های concrete»، و الهام گرفتن از نمونه‌های استاندارد مثل io.Reader و io.Writer است.

مشکل وقتی پیش می‌آید که یک پکیج، رابط‌های چاق و همه‌چیزدار صادر می‌کند؛ این کار تغییرات را سخت و پیاده‌سازی‌ها را پر از متدهای بی‌مصرف می‌کند. بهتر است رابط‌های کوچک را ترکیب یا embed کنیم، فقط وقتی واقعاً لازم است سراغ رابط‌های بزرگ برویم، و از میان‌افزارها/adapterها برای سازگاری در مسیر ریفکتور کمک بگیریم.

راهبرد عملی: ابتدا پیاده‌سازی‌های concrete بسازید، بعد بر اساس نیاز واقعی رابط استخراج کنید؛ مجموعه‌متدها را کوچک نگه دارید، برای تست از فیک/ماک بهره ببرید، و APIها را تدریجی تکامل دهید. با وجود generics هم باید از تعمیم بی‌جا پرهیز کرد و رابط‌های runtime را بر رفتار متمرکز نگه داشت. نتیجه پایبندی به ISP در Go، کدی ساده‌تر برای تست، نگهداشت و توسعه است؛ نکاتی که در تازه‌ترین مطلب معرفی‌شده توسط Golang Weekly نیز برجسته شده‌اند.

#Go #Golang #InterfaceSegregation #ISP #GoInterfaces #SoftwareDesign #Refactoring #GolangWeekly

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


👑 @gopher_academy
👍2