Gopher Academy
3.84K subscribers
932 photos
42 videos
280 files
2.19K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
google/jsonschema-go

🟢 خلاصه مقاله:
این مقاله دو کتابخانه Go برای کار با JSON Schema را مقایسه می‌کند: google/jsonschema-go و مخزن شخصی Ian Lance Taylor با نام ianlancetaylor/jsonschema. تمرکز اصلی بر کاربردهای عملی مانند اعتبارسنجی در زمان اجرا، هم‌ترازی قراردادهای داده میان سرویس‌ها، و در صورت نیاز، تولید کد برای انواع Go است. به‌جای معرفی یک برنده قطعی، مجموعه‌ای از معیارهای انتخاب پیشنهاد می‌شود: پوشش استاندارد (کلیدواژه‌ها، فرمت‌ها، و ارجاعات $ref)، کیفیت گزارش خطا، کارایی در بارهای واقعی، قابلیت سفارشی‌سازی، و نشانه‌های پایداری و نگهداشت پروژه. همچنین سازگاری با فرآیندهای CI، نحوه حل $ref در فایل‌ها و URLها، و میزان تطبیق با ابزارهای رایج Go بررسی می‌شود. جمع‌بندی مقاله عملی است: هر دو گزینه قابل اتکا هستند و انتخاب نهایی باید بر اساس نیازهای خاص تیم—سادگی رابط، گستره امکانات، یا الزامات یکپارچه‌سازی—انجام شود.

#Go #JSONSchema #GoLang #OpenSource #Validation #CodeGeneration #GitHub

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


👑 @gopher_academy
🔵 عنوان مقاله
From 19 Hours to Under a Second: Building a Blazing-Fast TCP Scanner in Go

🟢 خلاصه مقاله:
با یک روایت عملی، مقاله توضیح می‌دهد چگونه یک اسکنر ساده TCP که ۱۹ ساعت طول می‌کشید، با بازطراحی در Go به ابزاری «زیر یک ثانیه» تبدیل شد. ابتدا نشان می‌دهد چرا اسکن مبتنی‌بر net.Dial حتی با همزمانی محدود گرفتار زمان‌های انتظار، محدودیت FD و سربار syscall می‌شود. سپس با گذار از اتصال‌های کامل به اسکن SYN، ساخت بسته‌ها، فیلترکردن پاسخ‌ها با BPF، و نگه‌داری وضعیت سبک‌وزن، سربار کرنل و زمان‌بندی به شدت کاهش می‌یابد. بهینه‌سازی‌هایی مانند batch کردن ارسال/دریافت، پیش‌اختصاص بافرها، کاهش تخصیص‌ها با sync.Pool، و حلقه‌های رویدادی کارا (epoll/kqueue) همراه با تنظیمات سیستم (ulimit، بافرهای سوکتی و sysctl) throughput را به حداکثر می‌رساند. با پروفایل‌کردن مداوم (pprof) و راستی‌آزمایی با ابزاری مانند Nmap، هم دقت و هم کارایی تضمین می‌شود. خروجی نهایی: الگوی عملی برای ساخت ابزارهای پرسرعت شبکه در Go—ترکیبی از انتخاب مدل درست (SYN به‌جای connect)، کاهش سربارها، batch کردن، اندازه‌گیری پیوسته، و پایبندی به اصول ایمنی و اخلاق اسکن. این مطلب در Golang Weekly برجسته شده است.

#Go #Golang #TCP #PortScanning #Networking #Performance #Concurrency #SystemsProgramming

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


👑 @gopher_academy
🔵 عنوان مقاله
Go's Release Cycle and Process as Go 1.26 Progresses

🟢 خلاصه مقاله:
با نزدیک‌شدن به انتشار Go 1.26، فرآیند انتشار این زبان وارد مرحله حساس می‌شود. طبق برنامه، تاریخ “development freeze” برای ۲۶ نوامبر تعیین شده است؛ یعنی از این زمان هیچ قابلیت جدیدی برای Go 1.26 پذیرفته نمی‌شود و تمرکز پروژه بر رفع باگ‌ها، بهبود کارایی، مستندسازی و آزمون است. نسخه‌های beta و RC برای آزمایش جامعه منتشر می‌شوند تا مشکلات واقعی سریع‌تر شناسایی و رفع شوند.

برای توسعه‌دهندگان، این یعنی تغییراتی که تا موعد یادشده آماده نشوند، به چرخه بعدی (مثلاً Go 1.27) منتقل خواهند شد. پیشنهاد می‌شود پروژه‌ها و کتابخانه‌ها، ساخت‌ها و تست‌های خود را با پیش‌انتشارهای Go 1.26 اجرا کنند و هر گونه مشکل را سریع گزارش دهند تا در نسخه نهایی رفع شود. این انضباط در “فریز” ویژگی‌ها و محدودکردن تغییرات پرریسک، مسیر انتشار پایدار و قابل‌پیش‌بینی Go را تضمین می‌کند.

#Go #Golang #Go126 #ReleaseCycle #DevelopmentFreeze #SoftwareRelease #ProgrammingLanguages #OpenSource

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


👑 @gopher_academy
👍1
🔵 عنوان مقاله
their favorite Go related blog posts of all time.

🟢 خلاصه مقاله:
این شماره جدید از خبرنامه Golang Weekly فهرستی منتخب از «بهترین پست‌های وبلاگی مرتبط با Go» را گرد آورده است؛ مجموعه‌ای منسجم که به‌جای فهرست صرفِ لینک‌ها، مسیر مطالعه‌ای ارائه می‌دهد برای درک اصول ماندگار Go. موضوعات کلیدی مانند همروندی با goroutine و channel، خطاپرداری شفاف، استفاده از interface و ترکیب‌پذیری، آزمون‌نویسی و ابزارها، همچنین بهینه‌سازی کارایی، پروفایلینگ و مدیریت حافظه پوشش داده می‌شوند. هر انتخاب با توضیحی کوتاه درباره ارزش ماندگارش و اینکه به درد چه کسی و چه مسئله‌ای می‌خورد همراه است؛ نوآموزان می‌توانند آن را نقشه راه یادگیری بدانند و باتجربه‌ها نیز برای بازبینی مبانی و دیدگاه‌های عمیق‌تر از آن بهره ببرند. این گردآوری تصویری از مسیر بلوغ جامعه Go نیز ارائه می‌کند؛ از نوشته‌های اولیه که روحیه طراحی زبان را شکل دادند تا جمع‌بندی‌های اخیر که بر تجربه‌های تولیدی تکیه دارند—مجموعه‌ای برای نشان‌گذاری، اشتراک با تیم و رجوع‌های مکرر.

#Go #Golang #GolangWeekly #Programming #SoftwareEngineering #Concurrency #GoTips #DevCommunity

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


👑 @gopher_academy
1👍1
🔵 عنوان مقاله
vite-plugin-use-golang: Write Go in JavaScript Files?

🟢 خلاصه مقاله:
** این افزونه با نام vite-plugin-use-golang برای Vite یک آزمایش جالب است که با قرار دادن دستور "use golang" داخل فایل‌های JavaScript، کدهای Go را شناسایی کرده و آن‌ها را برای استفاده در فرانت‌اند به WebAssembly کامپایل می‌کند. نتیجه این است که می‌توانید بخشی از منطق Go را مستقیماً در مرورگر و کنار کدهای JavaScript فراخوانی کنید. این رویکرد برای بهره‌برداری مجدد از منطق موجود در Go یا آزمایش بخش‌های حساس به کارایی مفید است، اما پیچیدگی فرایند ساخت، افزایش حجم باندل، زمان راه‌اندازی WASM، دشواری دیباگ و محدودیت دسترسی مستقیم به DOM از چالش‌های آن هستند. در مجموع، این کار «نامتعارف اما واقعی» است و نشان می‌دهد زنجیره ابزارهای امروز تا کجا قابل گسترش است.

#Vite #Go #WebAssembly #WASM #JavaScript #Frontend #DevTools #WasmInBrowser

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


👑 @gopher_academy
🔵 عنوان مقاله
Timezones as Types: Making Time Safer to Use in Go?

🟢 خلاصه مقاله:
** این مقاله ایده Timezones as Types را بررسی می‌کند؛ رویکردی که در آن اطلاعات منطقه زمانی به‌صورت مستقیم در نوع داده‌ها کدگذاری می‌شود. نویسنده، سازنده go-meridian، نشان می‌دهد چگونه می‌توان با مدل‌کردن timezoneها در سطح نوع، از ترکیب نادرست زمان‌ها جلوگیری کرد تا خطاها به‌جای زمان اجرا، در مرحله کامپایل آشکار شوند.

go-meridian به‌جای تکیه بر متغیرهای بدون نوع مشخص، زمان را به نوعی گره می‌زند که منطقه زمانی را نیز در بر دارد؛ بنابراین اگر دو مقدار با منطقه‌های متفاوت بدون تبدیل صریح ترکیب شوند، کد اصلاً کامپایل نمی‌شود. این کار خطاهای رایجی مانند دست‌کم‌گرفتن تغییرات DST، ابهام در زمان‌های محلی، یا تبدیل‌های ضمنی از/به UTC را کاهش می‌دهد و خوانایی و صراحت کد را بهبود می‌بخشد.

این کتابخانه با سبک Go و بسته time سازگار است، تبدیل‌های صریح را در نقاط مرزی اجبار می‌کند و به تیم‌ها کمک می‌کند داده‌های ورودی را زودهنگام به زمان‌های با نوع صحیح تبدیل کنند. هرچند ممکن است اندکی صراحت بیشتر در امضاها و تبدیل‌ها لازم باشد، اما دستاورد آن قراردادهای واضح‌تر، ایمنی بالاتر و نگه‌داری آسان‌تر کدهای حساس به زمان است.

#Go #Golang #Timezone #TypeSafety #StaticTyping #goMeridian #TimeHandling #SoftwareEngineering

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


👑 @gopher_academy
1
🔵 عنوان مقاله
Crush: Charm's Go-Powered AI Coding Agent

🟢 خلاصه مقاله:
Crush یک عامل کدنویسی مبتنی بر هوش مصنوعی از شرکت Charm و ساخته‌شده با Go است که پس از چند ماه توسعه از یک مخزن اولیه به ابزاری پخته و قابل استفاده تبدیل شده. مهم‌ترین مزیت Crush انعطاف‌پذیری آن است: با هر LLM API سازگار با OpenAI کار می‌کند، بنابراین می‌توانید بسته به نیاز عملکرد، هزینه یا حریم داده‌ها از ارائه‌دهندگان مختلف یا endpointهای خودمیزبان استفاده کنید. Crush رقیبی برای ابزارهایی مانند Claude Code و Codex محسوب می‌شود و با تکیه بر سادگی، سرعت و همخوانی با جریان کاری توسعه‌دهندگان—به‌ویژه در اکوسیستم Go و فضای CLI—تجربه‌ای آشنا و قابل ترکیب ارائه می‌دهد. اگر به دنبال دستیار کدنویسی بدون قفل‌شدن به یک فروشنده واحد هستید، Crush گزینه‌ای جدی برای بررسی است.

#AI #Go #DevTools #LLM #OpenAI #Charm #CodingAssistant #BubbleTea

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


👑 @gopher_academy
1👍1
🔵 عنوان مقاله
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