🔵 عنوان مقاله
Using Go Embed
🟢 خلاصه مقاله:
مقاله توجه را به قابلیت مهمی در زبان برنامهنویسی Go با نام `go:embed` معطوف میکند که از نسخه 1.16 موجود است. این دستورالعمل امکان ضمیمه کردن فایلهای استاتیک و حتی پوشههای کامل را درون باینریها فراهم میکند. به جای ذخیرهسازی فایلها و دایرکتوریهای مورد نیاز برنامه به صورت جداگانه، `go:embed` این امکان را میدهد که محتویات مورد نظر را مستقیماً درون ساختار (`struct`) خود برنامه ضمیمه کنید.
با استفاده از این قابلیت، برنامهنویسان میتوانند از کاراکترهای وایلدکارد برای اضافه کردن فایلها استفاده کنند و به تعبیه مستقیم دایرکتوریها در اپلیکیشن پردازند، که در نتیجه مدیریت فایلها را سادهتر میکند و بهینگی برنامه را افزایش میدهد. این رویکرد میتواند به خصوص برای توزیع نرمافزارهای تحت وب و اپلیکیشنهای مبتنی بر GUI که نیازمند منابع خارجی همچون تصاویر، قالبها و فایلهای سبک هستند، مفید واقع شود.
🟣لینک مقاله:
https://golangweekly.com/link/160758/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Using Go Embed
🟢 خلاصه مقاله:
مقاله توجه را به قابلیت مهمی در زبان برنامهنویسی Go با نام `go:embed` معطوف میکند که از نسخه 1.16 موجود است. این دستورالعمل امکان ضمیمه کردن فایلهای استاتیک و حتی پوشههای کامل را درون باینریها فراهم میکند. به جای ذخیرهسازی فایلها و دایرکتوریهای مورد نیاز برنامه به صورت جداگانه، `go:embed` این امکان را میدهد که محتویات مورد نظر را مستقیماً درون ساختار (`struct`) خود برنامه ضمیمه کنید.
با استفاده از این قابلیت، برنامهنویسان میتوانند از کاراکترهای وایلدکارد برای اضافه کردن فایلها استفاده کنند و به تعبیه مستقیم دایرکتوریها در اپلیکیشن پردازند، که در نتیجه مدیریت فایلها را سادهتر میکند و بهینگی برنامه را افزایش میدهد. این رویکرد میتواند به خصوص برای توزیع نرمافزارهای تحت وب و اپلیکیشنهای مبتنی بر GUI که نیازمند منابع خارجی همچون تصاویر، قالبها و فایلهای سبک هستند، مفید واقع شود.
🟣لینک مقاله:
https://golangweekly.com/link/160758/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Bytesizego
Using Go Embed
The go:embed feature simplifies the inclusion of static assets in your Go applications. By embedding files and directories at compile time, you can create more portable and self-contained binaries.
❤4
✍️Amir NiloofariAmir Niloofari
آشنایی با Garbage Collector در Go
: مدیریت حافظه کارآمد برای نرمافزارها با کارایی بالا - قسمت ۱
همانطور که در پست قبل اشاره شد یکی از تمایزهای کلیدی Go، جمع آوری زباله همزمان(Concurrent Garbage collector) آن است که به طور هدفمند برای محیط های ابری و سرورهای مدرن ساخته شده است.
با Go، توسعهدهندگان میتوانند برنامههایی با کارایی بالا بسازند و در عین حال مدیریت حافظه را به یک جمعآوری زباله بسیار بهینه و کم تأخیر بسپارند.
در این پست قرار است نگاهی عمیقتر به دلیل متمایز شدن Go’s GC و نحوه عملکرد آن بیندازیم:
- الگوریتم Mark-and-Sweep همزمان:
Go از فرآیند جمعآوری زباله Mark-and-Sweep استفاده میکند که همزمان با برنامه اجرا میشود. در مرحله Mark، لایو آبجکتها (آبجکتی که حداقل یک مرجع به آن وجود دارد) شناسایی و علامت گذاری می شوند. سپس در مرحله Sweep حافظه را برای آبجکتهایی که دیگر به آنها ارجاع داده نمی شود اختصاص می دهد. زیبایی این فرآیند این است که به موازات اجرای برنامه اتفاق میافتد که برای ساخت برنامههای حساس به عملکرد مانند سرورهای وب یا سیستمهای توزیع شده که در آن وقفهها میتوانند مستقیماً بر تاخیر (latency) تاثیر بگذارند، بسیار مهم است.
- تأخیر کم:
GC Go برای سناریوهای Low latency بهینه شده است که این برای برنامه هایی که نیاز به زمان پاسخ سریع دارند، مانند سیستم های بلادرنگ یا API هایی که حجم زیادی از ترافیک را مدیریت می کنند، ایده آل است. جمعآوری زباله به گونهای طراحی شده است که مکثها را به حداقل میرساند و حجم کاری خود را در چندین هسته CPU توزیع میکند و عملکرد برنامه را صاف و بدون وقفه نگه میدارد.
- الگوریتم علامت گذاری سه رنگ(Tricolor Marking):
اگر بخواهیم پشت پرده عملکرد زبان گو در مدیریت آبجکتها را ببینیم از الگوریتم علامت گذاری سه رنگ برای مدیریت کارآمد چرخه عمر اشیا استفاده می کند.
آبجکتها به عنوان سفید (غیرقابل دسترسی)، خاکستری (قابل دسترسی اما به طور کامل کاوش نشده)، یا سیاه (کاملا قابل دسترسی و کاوش شده) طبقه بندی می شوند. این رویکرد تضمین میکند که آبجکتها زنده به درستی علامتگذاری میشوند، در حالی که آبجکتها غیرقابل دسترس کنار گذاشته میشوند، حفظ حافظه غیر ضروری را کاهش میدهد و استفاده کارآمدتر از حافظه را تضمین میکند.
- نوشتن موانع برای اصلاحات حافظه ایمن:
Go در مرحله علامتگذاری از write barriers استفاده میکند تا هنگام تغییر آبجکتها در حافظه، دقت را حفظ کند.
این موانع بهعنوان نقاط بازرسی عمل میکنند و اطمینان میدهند که جمعآورنده زباله از تغییرات در ارجاعات آبجکتها حتی زمانی که برنامه هنوز در حال اجرا است، آگاه است.
این مکانیسم از Memory corruption جلوگیری می کند (هنگامی که محتویات یک مکان حافظه به دلیل رفتار برنامهای که از قصد برنامهنویس اصلی یا سازههای برنامه/زبان فراتر میرود، تغییر میکند.) و تضمین می کند که آبجکتها زنده به اشتباه جابجا نمی شوند و کل سیستم را انعطاف پذیرتر و پاسخگوتر می کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
آشنایی با Garbage Collector در Go
: مدیریت حافظه کارآمد برای نرمافزارها با کارایی بالا - قسمت ۱
همانطور که در پست قبل اشاره شد یکی از تمایزهای کلیدی Go، جمع آوری زباله همزمان(Concurrent Garbage collector) آن است که به طور هدفمند برای محیط های ابری و سرورهای مدرن ساخته شده است.
با Go، توسعهدهندگان میتوانند برنامههایی با کارایی بالا بسازند و در عین حال مدیریت حافظه را به یک جمعآوری زباله بسیار بهینه و کم تأخیر بسپارند.
در این پست قرار است نگاهی عمیقتر به دلیل متمایز شدن Go’s GC و نحوه عملکرد آن بیندازیم:
- الگوریتم Mark-and-Sweep همزمان:
Go از فرآیند جمعآوری زباله Mark-and-Sweep استفاده میکند که همزمان با برنامه اجرا میشود. در مرحله Mark، لایو آبجکتها (آبجکتی که حداقل یک مرجع به آن وجود دارد) شناسایی و علامت گذاری می شوند. سپس در مرحله Sweep حافظه را برای آبجکتهایی که دیگر به آنها ارجاع داده نمی شود اختصاص می دهد. زیبایی این فرآیند این است که به موازات اجرای برنامه اتفاق میافتد که برای ساخت برنامههای حساس به عملکرد مانند سرورهای وب یا سیستمهای توزیع شده که در آن وقفهها میتوانند مستقیماً بر تاخیر (latency) تاثیر بگذارند، بسیار مهم است.
- تأخیر کم:
GC Go برای سناریوهای Low latency بهینه شده است که این برای برنامه هایی که نیاز به زمان پاسخ سریع دارند، مانند سیستم های بلادرنگ یا API هایی که حجم زیادی از ترافیک را مدیریت می کنند، ایده آل است. جمعآوری زباله به گونهای طراحی شده است که مکثها را به حداقل میرساند و حجم کاری خود را در چندین هسته CPU توزیع میکند و عملکرد برنامه را صاف و بدون وقفه نگه میدارد.
- الگوریتم علامت گذاری سه رنگ(Tricolor Marking):
اگر بخواهیم پشت پرده عملکرد زبان گو در مدیریت آبجکتها را ببینیم از الگوریتم علامت گذاری سه رنگ برای مدیریت کارآمد چرخه عمر اشیا استفاده می کند.
آبجکتها به عنوان سفید (غیرقابل دسترسی)، خاکستری (قابل دسترسی اما به طور کامل کاوش نشده)، یا سیاه (کاملا قابل دسترسی و کاوش شده) طبقه بندی می شوند. این رویکرد تضمین میکند که آبجکتها زنده به درستی علامتگذاری میشوند، در حالی که آبجکتها غیرقابل دسترس کنار گذاشته میشوند، حفظ حافظه غیر ضروری را کاهش میدهد و استفاده کارآمدتر از حافظه را تضمین میکند.
- نوشتن موانع برای اصلاحات حافظه ایمن:
Go در مرحله علامتگذاری از write barriers استفاده میکند تا هنگام تغییر آبجکتها در حافظه، دقت را حفظ کند.
این موانع بهعنوان نقاط بازرسی عمل میکنند و اطمینان میدهند که جمعآورنده زباله از تغییرات در ارجاعات آبجکتها حتی زمانی که برنامه هنوز در حال اجرا است، آگاه است.
این مکانیسم از Memory corruption جلوگیری می کند (هنگامی که محتویات یک مکان حافظه به دلیل رفتار برنامهای که از قصد برنامهنویس اصلی یا سازههای برنامه/زبان فراتر میرود، تغییر میکند.) و تضمین می کند که آبجکتها زنده به اشتباه جابجا نمی شوند و کل سیستم را انعطاف پذیرتر و پاسخگوتر می کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🙏1💘1
Gopher Academy
✍️Amir NiloofariAmir Niloofari آشنایی با Garbage Collector در Go : مدیریت حافظه کارآمد برای نرمافزارها با کارایی بالا - قسمت ۱ همانطور که در پست قبل اشاره شد یکی از تمایزهای کلیدی Go، جمع آوری زباله همزمان(Concurrent Garbage collector) آن است که به طور…
آشنایی با Garbage Collector در Go: مدیریت حافظه کارآمد برای نرمافزارها با کارایی بالا - قسمت ۲
میتوانید قسمت ۱ را در پست قبلی مطالعه کنید. ادامه:
- جمع آوری زباله قابل تنظیم:
یکی از ویژگی های برجسته Go، جمع آوری زباله قابل تنظیم آن است. توسعهدهندگان میتوانند فرکانس GC را با استفاده از متغیر محیطی «GOGC» تنظیم کنند، که تعداد دفعات کار جمعآور زباله را نسبت به رشد پشته کنترل میکند.
مقدار پیش فرض 100 است، به این معنی که GC پس از دو برابر شدن اندازه پشته فعال می شود. افزایش مقدار «GOGC» فرکانس جمعآوری زباله را کاهش میدهد، مصرف حافظه را با وقفههای کمتر عوض میکند، در حالی که کاهش آن باعث میشود GC بیشتر اجرا شود و کنترل دقیقتری بر استفاده از حافظه تضمین میکند.
export GOGC=200 // رشد پشته را افزایش می دهد و باعث می شود GC کمتر اجرا شود
- Escape Analysis برای تخصیص پشته در مقابل هیپ:
کامپایلر Go از تحلیل گریز استفاده میکند، که تعیین میکند متغیرها میتوانند در کدام ساختار داده stack یا heap تخصیص داده شوند. متغیرهایی که از محدوده خود "فرار" نمی کنند (مانند متغیرهای محلی در یک تابع) به صورت پشته ای تخصیص داده می شوند که سریعتر است و از جمع آوری زباله به طور کلی جلوگیری می کند. از سوی دیگر، تخصیص هیپ توسط جمع کننده زباله ردیابی می شود و تحلیل فرار استفاده غیر ضروری از هیپ را به حداقل می رساند و مدیریت حافظه را برای بسیاری از برنامه ها بهینه می کند.
- Profiling and Monitoring عملکرد GC:
Go ابزارهای قوی برای نظارت و بهینه سازی عملکرد GC فراهم می کند. بسته «زمان اجرا» به توسعه دهندگان اجازه می دهد تا آمار دقیق GC را ردیابی کنند، در حالی که "pprof" پروفایل CPU و حافظه را برای شناسایی و رفع تنگناهای عملکرد ارائه می دهد. این به ویژه برای برنامههایی با تنظیمات دقیق که نیاز به کار در مقیاس یا زیر بار سنگین دارند، ارزشمند است و این امکان را میدهد الگوهای استفاده از حافظه را مشخص کرد و رفتار برنامه را بهینه نمود.
- کارایی حافظه در Go:
ترکیبی از جمعآوری همزمان زباله، Escape Analysis و موانع نوشتن تضمین میکند که Go در مدیریت حافظه بسیار کارآمد است، و آن را به یک انتخاب قدرتمند برای سیستمهای بکاند، میکروسرویسها و سرورهای با توان بالا تبدیل میکند.
چه در حال ساخت یک برنامه بومی ابری یا یک API با کارایی بالا باشید، GC به شما آرامش می دهد که مدیریت حافظه بدون نیاز به مداخله دستی بهینه شده است.
در نتیجه، جمعآوری زباله Go یکی از جذابیتهای این زبان برای توسعه سیستمهای پیشرفته و توزیعشده مدرن است که به توسعه دهنده این امکان را می دهد بدون نگرانی در مورد مدیریت حافظه سطح پایین، بر روی ساخت برنامه های مقیاس پذیر و با کارایی بالا تمرکز کند. با گزینههای تنظیم دقیق، ابزارهای پروفایل قوی و حداقل وقفهها، GC Go تضمین میکند که حافظه به صورتی کارآمد به گونهای که برای توسعهدهنده شفاف باشد، مدیریت میشود.
اگر با Go کار میکنید، زمانی را صرف درک نحوه عملکرد جمعکننده زباله آن کنید این میتواند به شما در تصمیمگیری بهتر در مورد عملکرد، مقیاسپذیری و بهینهسازی حافظه کمک کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
میتوانید قسمت ۱ را در پست قبلی مطالعه کنید. ادامه:
- جمع آوری زباله قابل تنظیم:
یکی از ویژگی های برجسته Go، جمع آوری زباله قابل تنظیم آن است. توسعهدهندگان میتوانند فرکانس GC را با استفاده از متغیر محیطی «GOGC» تنظیم کنند، که تعداد دفعات کار جمعآور زباله را نسبت به رشد پشته کنترل میکند.
مقدار پیش فرض 100 است، به این معنی که GC پس از دو برابر شدن اندازه پشته فعال می شود. افزایش مقدار «GOGC» فرکانس جمعآوری زباله را کاهش میدهد، مصرف حافظه را با وقفههای کمتر عوض میکند، در حالی که کاهش آن باعث میشود GC بیشتر اجرا شود و کنترل دقیقتری بر استفاده از حافظه تضمین میکند.
export GOGC=200 // رشد پشته را افزایش می دهد و باعث می شود GC کمتر اجرا شود
- Escape Analysis برای تخصیص پشته در مقابل هیپ:
کامپایلر Go از تحلیل گریز استفاده میکند، که تعیین میکند متغیرها میتوانند در کدام ساختار داده stack یا heap تخصیص داده شوند. متغیرهایی که از محدوده خود "فرار" نمی کنند (مانند متغیرهای محلی در یک تابع) به صورت پشته ای تخصیص داده می شوند که سریعتر است و از جمع آوری زباله به طور کلی جلوگیری می کند. از سوی دیگر، تخصیص هیپ توسط جمع کننده زباله ردیابی می شود و تحلیل فرار استفاده غیر ضروری از هیپ را به حداقل می رساند و مدیریت حافظه را برای بسیاری از برنامه ها بهینه می کند.
- Profiling and Monitoring عملکرد GC:
Go ابزارهای قوی برای نظارت و بهینه سازی عملکرد GC فراهم می کند. بسته «زمان اجرا» به توسعه دهندگان اجازه می دهد تا آمار دقیق GC را ردیابی کنند، در حالی که "pprof" پروفایل CPU و حافظه را برای شناسایی و رفع تنگناهای عملکرد ارائه می دهد. این به ویژه برای برنامههایی با تنظیمات دقیق که نیاز به کار در مقیاس یا زیر بار سنگین دارند، ارزشمند است و این امکان را میدهد الگوهای استفاده از حافظه را مشخص کرد و رفتار برنامه را بهینه نمود.
- کارایی حافظه در Go:
ترکیبی از جمعآوری همزمان زباله، Escape Analysis و موانع نوشتن تضمین میکند که Go در مدیریت حافظه بسیار کارآمد است، و آن را به یک انتخاب قدرتمند برای سیستمهای بکاند، میکروسرویسها و سرورهای با توان بالا تبدیل میکند.
چه در حال ساخت یک برنامه بومی ابری یا یک API با کارایی بالا باشید، GC به شما آرامش می دهد که مدیریت حافظه بدون نیاز به مداخله دستی بهینه شده است.
در نتیجه، جمعآوری زباله Go یکی از جذابیتهای این زبان برای توسعه سیستمهای پیشرفته و توزیعشده مدرن است که به توسعه دهنده این امکان را می دهد بدون نگرانی در مورد مدیریت حافظه سطح پایین، بر روی ساخت برنامه های مقیاس پذیر و با کارایی بالا تمرکز کند. با گزینههای تنظیم دقیق، ابزارهای پروفایل قوی و حداقل وقفهها، GC Go تضمین میکند که حافظه به صورتی کارآمد به گونهای که برای توسعهدهنده شفاف باشد، مدیریت میشود.
اگر با Go کار میکنید، زمانی را صرف درک نحوه عملکرد جمعکننده زباله آن کنید این میتواند به شما در تصمیمگیری بهتر در مورد عملکرد، مقیاسپذیری و بهینهسازی حافظه کمک کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🔥1💯1
کلیدیترین تفاوتهای بین
### 1. مبنای زمانبندی
- **
یک بازه زمانی ثابت مشخص میکند. Context پس از گذشت مدت زمان مشخص از زمان فراخوانی این تابع، منقضی میشود.
- مثال: اگر
- **
یک زمان مشخص در آینده تعیین میکند. Context دقیقا در لحظهی مشخص شده در deadline منقضی میشود.
- مثال: اگر
مورد استفادهستفاده**
- **
زمانی که مدت زمان اجرای یک عملیات برای شما مهم است و میخواهید پس از مدت مشخصی عملیات خاتمه یابد، از
- **
زمانی که به یک deadline دقیق نیاز دارید (مانند زمانی که میخواهید قبل از یک لحظهی دقیق، عملیاتی خاتمه یابد)، از
### 4. **انعطافپذیری بیشتر
- در مواردی که زمان دقیق (مربوط به یک deadline خاص) برای شما مهم است،
- **
### مثالها:
در نهایت، انتخاب بین این دو تابع بستگی به نوع نیاز شما به زمانبندی و مدیریت زمان اجرای عملیاتها دارد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
context.WithTimeout
و context.WithDeadline
در نحوهی مدیریت زمانبندی و خاتمهی contextها در Go است:### 1. مبنای زمانبندی
- **
context.WithTimeout
**:یک بازه زمانی ثابت مشخص میکند. Context پس از گذشت مدت زمان مشخص از زمان فراخوانی این تابع، منقضی میشود.
- مثال: اگر
context.WithTimeout(ctx, 5*time.Second)
فراخوانی شود، context پس از ۵ ثانیه منقضی میشود.- **
context.WithDeadline
**:یک زمان مشخص در آینده تعیین میکند. Context دقیقا در لحظهی مشخص شده در deadline منقضی میشود.
- مثال: اگر
context.WithDeadline(ctx, time.Now().Add(5*time.Second))
فراخوانی شود، context در لحظهی دقیق مشخص شده (۵ ثانیه بعد) منقضی میشود.مورد استفادهستفاده**
- **
WithTimeout
**: زمانی که مدت زمان اجرای یک عملیات برای شما مهم است و میخواهید پس از مدت مشخصی عملیات خاتمه یابد، از
WithTimeout
استفاده میشود.- **
WithDeadline
**:زمانی که به یک deadline دقیق نیاز دارید (مانند زمانی که میخواهید قبل از یک لحظهی دقیق، عملیاتی خاتمه یابد)، از
WithDeadline
استفاده پیادهسازی داخWithTimeout **WithTimeout
** به عنوان یک shortcut برای WithDeadline
عمل میکند و در واقع از WithDeadline
استفاده میکند تا زمانی که مدت مشخص شده به پایان برسد. به این معنا که WithTimeout(ctx, d)
معادل WithDeadline(ctx, time.Now().Add(d))
است.### 4. **انعطافپذیری بیشتر
WithDeadline
**- در مواردی که زمان دقیق (مربوط به یک deadline خاص) برای شما مهم است،
WithDeadline
انعطاف بیشتری فراهم میکند، زیرا میتوانید زمان مشخصی را به عنوان نقطکاربردهای رایج. **کاربردهای رایج**- **
context.WithTimeout
** معمولاً برای تعیین یک بازه زمانی ثابت برای خاتمه دادن به عملیاتی مانند درcontext.WithDeadline**context.WithDeadline
** اغلب در سیستمهای توزیع شده یا عملیاتی که یک زمانبندی خاص برای اتمام دارند، کاربرد دارد.### مثالها:
// WithTimeout: منقضی شدن پس از 5 ثانیه
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// WithDeadline: منقضی شدن در یک زمان دقیق
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second))
defer cancel()
در نهایت، انتخاب بین این دو تابع بستگی به نوع نیاز شما به زمانبندی و مدیریت زمان اجرای عملیاتها دارد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🎉2✍1
Gopher Academy
کلیدیترین تفاوتهای بین context.WithTimeout و context.WithDeadline در نحوهی مدیریت زمانبندی و خاتمهی contextها در Go است: ### 1. مبنای زمانبندی - **context.WithTimeout**: یک بازه زمانی ثابت مشخص میکند. Context پس از گذشت مدت زمان مشخص از زمان فراخوانی…
برای درک بهتر از مکانیزم داخلی
این دو تابع هر دو بر اساس
### 1. ساختار Context
هر دو
- **
این تابع مدت زمانی به عنوان ورودی میگیرد و به کمک آن یک تایمر تنظیم میکند. تایمر از زمان فعلی (
- تایمر در واقع یک goroutine راهاندازی میکند که بعد از گذشت زمان، یک سیگنال خاتمه (
- **
مشابه
مکانیزم استفاده از تایمرهاایمرها**
در هر دو روش، تایمرها با استفاده از
نحوهی لغو Contextontext**
هر دو تابع به همراه یک تابع
نحوهی بررسی انقضای Contextontext**
هنگامی که عملیات در جریان است، شما میتوانید با استفاده از
### 5. **پیادهسازی داخلی
در کد داخلی کتابخانه
این تابع فقط زمان حال (
### 6. **زمانبندی دقیقتر با
در
### نتیجهگیری:
-
-
- هر دو تابع مکانیزمهای مشابهی از تایمرهای Go استفاده میکنند و هر دو به کمک goroutineها برای ارسال سیگنال خاتمه عمل میکنند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
context.WithTimeout
و context.WithDeadline
، باید به نحوهی پیادهسازی آنها در کتابخانهی context
و چگونگی استفاده از تایمرها در Go توجه کنیم. این دو تابع هر دو بر اساس
context
پایهای ساخته میشوند، اما تفاوت اصلی آنها در نحوهی مدیریت زمان و استفاده از تایمرهای داخلی است.### 1. ساختار Context
هر دو
WithTimeout
و WithDeadline
با ایجاد یک derived context
(مشتقشده از context اصلی) کار میکنند. این context جدید مشابه context اصلی است، اما به جای آن که تا انتهای عمر برنامه معتبر باشد، در یک زمان مشخص منقضی میشود. مکانیزم داخلی به این صورت است:- **
WithTimeout
**: این تابع مدت زمانی به عنوان ورودی میگیرد و به کمک آن یک تایمر تنظیم میکند. تایمر از زمان فعلی (
time.Now()
) شروع به شمارش میکند و بعد از اتمام مدت زمان مشخص شده، context منقضی میشود. - تایمر در واقع یک goroutine راهاندازی میکند که بعد از گذشت زمان، یک سیگنال خاتمه (
Done
) ارسال میکند.- **
WithDeadline
**: مشابه
WithTimeout
است، اما به جای این که مدت زمان از حالا محاسبه شود، زمانی ثابت برای خاتمه داده میشود. Goroutine مشابهی برای زمان دقیق پایان شروع میشود. این تابع میتواند مفید باشد در مواقعی که باید عملیات حتماً قبل از یک زمان خاص خاتمه یابد.مکانیزم استفاده از تایمرهاایمرها**
در هر دو روش، تایمرها با استفاده از
time.AfterFunc
یا time.NewTimer
در Go پیادهسازی میشوند. تایمر بهگونهای عمل میکند که وقتی زمان مشخص شده به پایان برسد، کانال Done
فعال شده و پیام خاتمه ارسال میشود. در این زمان، عملیات مرتبط باید متوقف شود و با بررسی کانال Done
از ادامهی کار بازماند.نحوهی لغو Contextontext**
هر دو تابع به همراه یک تابع
cancel
بازگردانده میشوند. این تابع cancel
به شما اجازه میدهد به صورت دستی context را قبل از پایان زمان آن لغو کنید. وقتی cancel
فراخوانی شود، تایمر مربوط به context متوقف شده و کانال Done
نیز بسته میشود. این مکانیزم به شما کمک میکند تا منابع استفادهشده توسط تایمرها را پاکسازی کنید و از اجرای بیمورد جلوگیری نمایید.نحوهی بررسی انقضای Contextontext**
هنگامی که عملیات در جریان است، شما میتوانید با استفاده از
ctx.Done()
بررسی کنید که آیا context منقضی شده یا خیر. این تابع یک کانال بازمیگرداند که در صورت انقضای context، بسته میشود و به goroutineها سیگنال میدهد که عملیات فعلی را خاتمه دهند. این سیگنالدهی از طریق select
یا بررسی مستقیم کانال انجام میشود.### 5. **پیادهسازی داخلی
WithTimeout
به کمک WithDeadline
**در کد داخلی کتابخانه
context
، پیادهسازی WithTimeout
به صورت مستقیم از WithDeadline
استفاده میکند:func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
return WithDeadline(parent, time.Now().Add(timeout))
}
این تابع فقط زمان حال (
time.Now()
) را به timeout
اضافه کرده و آن را به WithDeadline
ارسال میکند. به همین دلیل، WithTimeout
در واقع یک shortcut برای WithDeadline
است.### 6. **زمانبندی دقیقتر با
WithDeadline
**در
WithDeadline
شما میتوانید یک زمان دقیق برای انقضا مشخص کنید. مثلاً میتوانید تعیین کنید که context در ساعت مشخصی منقضی شود، بدون توجه به این که در حال حاضر چقدر زمان باقیمانده است. این ویژگی برای مواردی مفید است که نیاز دارید چندین عملیات به طور همزمان و هماهنگ با یک deadline خاص به پایان برسند.### نتیجهگیری:
-
WithTimeout
برای محدود کردن مدت زمان یک عملیات مفید است.-
WithDeadline
برای تعیین یک زمان دقیق (مانند یک deadline واقعی) استفاده میشود.- هر دو تابع مکانیزمهای مشابهی از تایمرهای Go استفاده میکنند و هر دو به کمک goroutineها برای ارسال سیگنال خاتمه عمل میکنند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍2❤1🎉1
Forwarded from Bardia & Erfan
تأثیر دانش زبان انگلیسی در دنیای برنامهنویسی از نگاه موسسه زبان آفاق
https://www.zoomit.ir/pr/428701-afagh-lc/
➖➖➖➖➖➖➖➖
👑 @labdon_academy
https://www.zoomit.ir/pr/428701-afagh-lc/
➖➖➖➖➖➖➖➖
👑 @labdon_academy
🎉1🍓1👻1
🔵 عنوان مقاله
Product for Engineers: A Newsletter Helping Flex Your Product Muscle
🟢 خلاصه مقاله:
مقاله "Product for Engineers" به بررسی مهارتها و استراتژیهای لازم برای مهندسین محصول میپردازد تا آنها در حرفهشان موفق شوند. در این مقاله، اهمیت ترکیب مهارتهای فنی با دانش مدیریت محصول تأکید شده است. مهندسین محصول باید نه تنها در فناوریهای مربوطه مهارت داشته باشند، بلکه باید قادر به درک نیازهای بازار و توسعه راه حلهای متناسب با این نیازها نیز باشند. مقاله همچنین بر اهمیت توانایی کار در تیمهای متقاطع و ارتباط موثر با سایر بخشهای شرکت، از جمله بازاریابی و فروش، تأکید میکند. نویسنده به مهندسین محصول توصیه میکند که برای موفقیت در نقشهای مدیریتی، باید مهارتهای رهبری و تصمیمگیری را نیز توسعه دهند. بهطور خلاصه، هدف اصلی مقاله تقویت درک مهندسین محصول از اصول اساسی مدیریت محصول و توسعه مهارتهای کلیدی مورد نیاز برای پیشرفت در این حرفه است.
🟣لینک مقاله:
https://golangweekly.com/link/160760/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Product for Engineers: A Newsletter Helping Flex Your Product Muscle
🟢 خلاصه مقاله:
مقاله "Product for Engineers" به بررسی مهارتها و استراتژیهای لازم برای مهندسین محصول میپردازد تا آنها در حرفهشان موفق شوند. در این مقاله، اهمیت ترکیب مهارتهای فنی با دانش مدیریت محصول تأکید شده است. مهندسین محصول باید نه تنها در فناوریهای مربوطه مهارت داشته باشند، بلکه باید قادر به درک نیازهای بازار و توسعه راه حلهای متناسب با این نیازها نیز باشند. مقاله همچنین بر اهمیت توانایی کار در تیمهای متقاطع و ارتباط موثر با سایر بخشهای شرکت، از جمله بازاریابی و فروش، تأکید میکند. نویسنده به مهندسین محصول توصیه میکند که برای موفقیت در نقشهای مدیریتی، باید مهارتهای رهبری و تصمیمگیری را نیز توسعه دهند. بهطور خلاصه، هدف اصلی مقاله تقویت درک مهندسین محصول از اصول اساسی مدیریت محصول و توسعه مهارتهای کلیدی مورد نیاز برای پیشرفت در این حرفه است.
🟣لینک مقاله:
https://golangweekly.com/link/160760/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Posthog
Product for Engineers | Substack
Helping engineers and founders flex their product muscles. Click to read Product for Engineers, a Substack publication with tens of thousands of subscribers.
👍1
🔵 عنوان مقاله
Go Gets High-Resolution Timers on Windows
🟢 خلاصه مقاله:
در این مقاله به بررسی پشتیبانی افزوده شده برای تایمرهای با وضوح بالا در نسخه 1.23 زبان برنامهنویسی Go بر روی سیستمعامل ویندوز پرداخته شده است. در نسخههای پیشین، وضوح تایمرها در حدود 15.6 میلیثانیه بود، اما با بهروزرسانیهای جدید، این وضوح به تقریباً 0.5 میلیثانیه افزایش یافته است. این بهبود قابل توجه، امکان دقت بیشتری را در زمانبندی عملیات و به خصوص در برنامههایی که نیازمند پردازش زمانی دقیق هستند، فراهم میکند. این تغییر میتواند تاثیرات مهمی در بهبود عملکرد کلی برنامههای نوشته شده به زبان Go داشته باشد، به ویژه در محیطهایی که پاسخگویی سریع الزامی است.
🟣لینک مقاله:
https://golangweekly.com/link/160756/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Go Gets High-Resolution Timers on Windows
🟢 خلاصه مقاله:
در این مقاله به بررسی پشتیبانی افزوده شده برای تایمرهای با وضوح بالا در نسخه 1.23 زبان برنامهنویسی Go بر روی سیستمعامل ویندوز پرداخته شده است. در نسخههای پیشین، وضوح تایمرها در حدود 15.6 میلیثانیه بود، اما با بهروزرسانیهای جدید، این وضوح به تقریباً 0.5 میلیثانیه افزایش یافته است. این بهبود قابل توجه، امکان دقت بیشتری را در زمانبندی عملیات و به خصوص در برنامههایی که نیازمند پردازش زمانی دقیق هستند، فراهم میکند. این تغییر میتواند تاثیرات مهمی در بهبود عملکرد کلی برنامههای نوشته شده به زبان Go داشته باشد، به ویژه در محیطهایی که پاسخگویی سریع الزامی است.
🟣لینک مقاله:
https://golangweekly.com/link/160756/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Microsoft News
High-Resolution Timers on Windows
The Go Windows port added support for high-resolution timers in Go 1.23, boosting the resolution of time.Sleep from ~15.6ms to ~0.5ms.
👍1🔥1
✍️Farshad AkbariFarshad Akbari
💡 آشنایی با کتابخانه sync در Go و کاربردهای آن برای مدیریت همزمانی
در برنامهنویسی Go، وقتی چند گوروتین همزمان اجرا میشوند، مدیریت همزمانی و دسترسی به منابع مشترک اهمیت زیادی پیدا میکند. کتابخانه sync در Go ابزارهایی فراهم میکند که به توسعهدهندگان کمک میکند تا این مدیریت را به سادگی و بدون بروز خطا انجام دهند. در ادامه به سه ابزار اصلی این کتابخانه اشاره میکنم:
1️⃣ Mutex (قفل متقابل)
Mutex برای جلوگیری از دسترسی همزمان گوروتینها به یک منبع مشترک استفاده میشود. مثلا اگر چند گوروتین بخواهند به طور همزمان یک متغیر را تغییر دهند، با استفاده از Mutex میتوانیم قفل دسترسی به این منبع را به یک گوروتین محدود کنیم.
2️⃣ WaitGroup (انتظار برای پایان گوروتینها)
وقتی چند گوروتین همزمان اجرا میشوند و میخواهیم تا پایان کار همهی آنها صبر کنیم، WaitGroup کاربرد دارد. این ابزار به ما اجازه میدهد که منتظر بمانیم تا همه گوروتینها کارشان را تمام کنند.
3️⃣ Once (اجرا فقط یکبار)
با استفاده از Once، میتوانیم اطمینان حاصل کنیم که یک تابع فقط یک بار اجرا شود، حتی اگر چند گوروتین به طور همزمان آن را صدا بزنند. این ابزار برای مواردی مثل مقداردهی اولیه بسیار کاربردی است.
🔍 جمعبندی
کتابخانه sync به توسعهدهندگان Go کمک میکند تا همزمانی را به خوبی مدیریت کنند و از بروز مشکلاتی مثل شرایط رقابتی جلوگیری کنند. استفاده درست از این ابزارها باعث افزایش کارایی و ایمنی برنامههای چندوظیفهای میشود.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
💡 آشنایی با کتابخانه sync در Go و کاربردهای آن برای مدیریت همزمانی
در برنامهنویسی Go، وقتی چند گوروتین همزمان اجرا میشوند، مدیریت همزمانی و دسترسی به منابع مشترک اهمیت زیادی پیدا میکند. کتابخانه sync در Go ابزارهایی فراهم میکند که به توسعهدهندگان کمک میکند تا این مدیریت را به سادگی و بدون بروز خطا انجام دهند. در ادامه به سه ابزار اصلی این کتابخانه اشاره میکنم:
1️⃣ Mutex (قفل متقابل)
Mutex برای جلوگیری از دسترسی همزمان گوروتینها به یک منبع مشترک استفاده میشود. مثلا اگر چند گوروتین بخواهند به طور همزمان یک متغیر را تغییر دهند، با استفاده از Mutex میتوانیم قفل دسترسی به این منبع را به یک گوروتین محدود کنیم.
2️⃣ WaitGroup (انتظار برای پایان گوروتینها)
وقتی چند گوروتین همزمان اجرا میشوند و میخواهیم تا پایان کار همهی آنها صبر کنیم، WaitGroup کاربرد دارد. این ابزار به ما اجازه میدهد که منتظر بمانیم تا همه گوروتینها کارشان را تمام کنند.
3️⃣ Once (اجرا فقط یکبار)
با استفاده از Once، میتوانیم اطمینان حاصل کنیم که یک تابع فقط یک بار اجرا شود، حتی اگر چند گوروتین به طور همزمان آن را صدا بزنند. این ابزار برای مواردی مثل مقداردهی اولیه بسیار کاربردی است.
🔍 جمعبندی
کتابخانه sync به توسعهدهندگان Go کمک میکند تا همزمانی را به خوبی مدیریت کنند و از بروز مشکلاتی مثل شرایط رقابتی جلوگیری کنند. استفاده درست از این ابزارها باعث افزایش کارایی و ایمنی برنامههای چندوظیفهای میشود.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
❤5👍1
🔵 عنوان مقاله
Writing a Circuit Breaker in Go
🟢 خلاصه مقاله:
این مقاله به بررسی سازوکار Circuit Breaker در مدیریت خطاها در سیستمهای محاسباتی میپردازد. Circuit Breaker یک روش موثر برای جلوگیری از تکرار اشتباهاتی است که ممکن است به صورت پیوسته رخ دهند و باعث تشدید مشکلات سیستم شوند. این سازوکار، شبیه به کلید برق در ساختمان عمل میکند؛ در صورت بروز خطا به طور خودکار عملیات مورد نظر را قطع میکند تا از آسیبهای بیشتر جلوگیری کند و با یک دوره زمانی تعیین شده به نام دوره خنک شدن، به سیستم این امکان را میدهد تا بازیابی کند. این رویکرد به کاهش آسیبپذیری سیستم کمک کرده و به بهبود ثبات و کارایی آن در برابر شکستهای احتمالی منجر میشود. این تکنیک، به ویژه در محیطهایی که دارای وابستگیهای متعدد و پیچیده هستند، حائز اهمیت است.
🟣لینک مقاله:
https://golangweekly.com/link/160757/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Writing a Circuit Breaker in Go
🟢 خلاصه مقاله:
این مقاله به بررسی سازوکار Circuit Breaker در مدیریت خطاها در سیستمهای محاسباتی میپردازد. Circuit Breaker یک روش موثر برای جلوگیری از تکرار اشتباهاتی است که ممکن است به صورت پیوسته رخ دهند و باعث تشدید مشکلات سیستم شوند. این سازوکار، شبیه به کلید برق در ساختمان عمل میکند؛ در صورت بروز خطا به طور خودکار عملیات مورد نظر را قطع میکند تا از آسیبهای بیشتر جلوگیری کند و با یک دوره زمانی تعیین شده به نام دوره خنک شدن، به سیستم این امکان را میدهد تا بازیابی کند. این رویکرد به کاهش آسیبپذیری سیستم کمک کرده و به بهبود ثبات و کارایی آن در برابر شکستهای احتمالی منجر میشود. این تکنیک، به ویژه در محیطهایی که دارای وابستگیهای متعدد و پیچیده هستند، حائز اهمیت است.
🟣لینک مقاله:
https://golangweekly.com/link/160757/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Redowan's Reflections
Writing a circuit breaker in Go
Besides retries, circuit breakers1 are probably one of the most commonly employed
resilience patterns in distributed systems. While writing a retry routine is pretty simple,
implementing a circuit breaker needs a little bit of work.
I realized that I usually…
resilience patterns in distributed systems. While writing a retry routine is pretty simple,
implementing a circuit breaker needs a little bit of work.
I realized that I usually…
🔵 عنوان مقاله
Sidekick: Bare Metal to Production Ready in Minutes
🟢 خلاصه مقاله:
مقالهای که بررسی شده به معرفی ابزار جدیدی به نام "Sidekick" میپردازد که با الهام از "Kamal" ساخته شده و به زبان برنامهنویسی Go نوشته شده است. هدف اصلی Sidekick این است که فرآیند استقرار نرمافزارها را بر روی سرورهای خصوصی به صورتی ساده و با استفاده از تنها یک دستور، مشابه به سرویس Fly.io، فراهم آورد. نویسنده مقاله هنوز فرصتی برای امتحان این ابزار نداشته است اما علاقهمند است که به زودی آن را بیازماید. از انجا که Sidekick بر اساس تجربیات و مفاهیم مشابه به Kamal طراحی شده، این ابزار میتواند راهحلی نوین و قدرتمند برای توسعهدهندگان و متخصصان IT در بهبود و تسهیل روند استقرار و مدیریت برنامهها بر روی ویپیاسها باشد.
🟣لینک مقاله:
https://golangweekly.com/link/160768/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Sidekick: Bare Metal to Production Ready in Minutes
🟢 خلاصه مقاله:
مقالهای که بررسی شده به معرفی ابزار جدیدی به نام "Sidekick" میپردازد که با الهام از "Kamal" ساخته شده و به زبان برنامهنویسی Go نوشته شده است. هدف اصلی Sidekick این است که فرآیند استقرار نرمافزارها را بر روی سرورهای خصوصی به صورتی ساده و با استفاده از تنها یک دستور، مشابه به سرویس Fly.io، فراهم آورد. نویسنده مقاله هنوز فرصتی برای امتحان این ابزار نداشته است اما علاقهمند است که به زودی آن را بیازماید. از انجا که Sidekick بر اساس تجربیات و مفاهیم مشابه به Kamal طراحی شده، این ابزار میتواند راهحلی نوین و قدرتمند برای توسعهدهندگان و متخصصان IT در بهبود و تسهیل روند استقرار و مدیریت برنامهها بر روی ویپیاسها باشد.
🟣لینک مقاله:
https://golangweekly.com/link/160768/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - MightyMoud/sidekick: Bare metal to production ready in mins; your own fly server on your VPS.
Bare metal to production ready in mins; your own fly server on your VPS. - MightyMoud/sidekick
🔥1
🔵 عنوان مقاله
Kamal 2: Thou Need Not PaaS
🟢 خلاصه مقاله:
مقاله به بررسی ابزار استقرار بر اساس کانتینر به نام Kamal از شرکت 37Signals میپردازد، شرکتی که بیشتر به خاطر توسعه Ruby on Rails شناخته شده است. اگرچه Kamal زبانناپذیر است و از زبانهای برنامهنویسی مختلف پشتیبانی میکند. این مقاله به توضیح و نمایش استقرار یک برنامه ساده به زبان Go با استفاده از یک دموی اسکرینکست میپردازد و سپس به مثالی با زبان Ruby میرسد. Kamal به عنوان یک گزینه جدید و قابل اعتماد برای استقرار برنامههای Go در سرورهای مدیریت شده توسط خود معرفی شده است که میتواند راه برای استفاده گستردهتر از آن را هموار سازد. ابزار مذکور میتواند تحولی در استقرار سریع و آسان نرمافزارها بر روی پلتفرمهای مختلف به ارمغان بیاورد.
🟣لینک مقاله:
https://golangweekly.com/link/160765/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Kamal 2: Thou Need Not PaaS
🟢 خلاصه مقاله:
مقاله به بررسی ابزار استقرار بر اساس کانتینر به نام Kamal از شرکت 37Signals میپردازد، شرکتی که بیشتر به خاطر توسعه Ruby on Rails شناخته شده است. اگرچه Kamal زبانناپذیر است و از زبانهای برنامهنویسی مختلف پشتیبانی میکند. این مقاله به توضیح و نمایش استقرار یک برنامه ساده به زبان Go با استفاده از یک دموی اسکرینکست میپردازد و سپس به مثالی با زبان Ruby میرسد. Kamal به عنوان یک گزینه جدید و قابل اعتماد برای استقرار برنامههای Go در سرورهای مدیریت شده توسط خود معرفی شده است که میتواند راه برای استفاده گستردهتر از آن را هموار سازد. ابزار مذکور میتواند تحولی در استقرار سریع و آسان نرمافزارها بر روی پلتفرمهای مختلف به ارمغان بیاورد.
🟣لینک مقاله:
https://golangweekly.com/link/160765/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Hey
Kamal 2: Thou need not PaaS
Kamal was our ticket out of the cloud. A simple tool for deploying containerized applications onto our own hardware, without the need for the complexity of something like Kubernetes. Kamal 2 is a huge leap forward for that tool, and it has just shipped. Now…
👍1
🔵 عنوان مقاله
go-pretty: Pretty Print Tables, Lists and Text on the Terminal
🟢 خلاصه مقاله:
مقالهای که در اختیار شما قرار دارد به بررسی ابزارهای مختلفی میپردازد که به زیباسازی خروجی کنسول در قالب جداول، لیستها، نوارهای پیشرفت، متن و غیره میپردازند. تمرکز اصلی این ابزارها بر روی قابلیت سفارشیسازی است. این سفارشیسازی به کاربران امکان میدهد تا ظاهر خروجیها را بر اساس نیازها و سلایق شخصی خود تنظیم کنند. از جمله مزایای استفاده از این ابزارها، بهبود خوانایی و جذابیت ویژوال خروجیهای کنسولی است، که میتواند در فهم بهتر و سریعتر دادهها به کاربران کمک کند. این ابزارها، به خصوص در محیطهای توسعه نرمافزار و آنالیز داده، کاربردی ارزشمند دارند. این مقاله با ارائه مثالهای متنوع، نحوه به کارگیری و پیادهسازی این ابزارها را با جزئیات و به صورت گام به گام توضیح میدهد.
🟣لینک مقاله:
https://golangweekly.com/link/160772/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go-pretty: Pretty Print Tables, Lists and Text on the Terminal
🟢 خلاصه مقاله:
مقالهای که در اختیار شما قرار دارد به بررسی ابزارهای مختلفی میپردازد که به زیباسازی خروجی کنسول در قالب جداول، لیستها، نوارهای پیشرفت، متن و غیره میپردازند. تمرکز اصلی این ابزارها بر روی قابلیت سفارشیسازی است. این سفارشیسازی به کاربران امکان میدهد تا ظاهر خروجیها را بر اساس نیازها و سلایق شخصی خود تنظیم کنند. از جمله مزایای استفاده از این ابزارها، بهبود خوانایی و جذابیت ویژوال خروجیهای کنسولی است، که میتواند در فهم بهتر و سریعتر دادهها به کاربران کمک کند. این ابزارها، به خصوص در محیطهای توسعه نرمافزار و آنالیز داده، کاربردی ارزشمند دارند. این مقاله با ارائه مثالهای متنوع، نحوه به کارگیری و پیادهسازی این ابزارها را با جزئیات و به صورت گام به گام توضیح میدهد.
🟣لینک مقاله:
https://golangweekly.com/link/160772/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - jedib0t/go-pretty: Table-writer and more in golang!
Table-writer and more in golang! Contribute to jedib0t/go-pretty development by creating an account on GitHub.
👍1
🔵 عنوان مقاله
Giu 0.9: A Dear ImGui-Based Cross Platform GUI Framework
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته است به توضیح و بررسی نحوه ساخت برنامههای کاربردی گرافیکی (GUI) با استفاده از زبان برنامهنویسی Go بر بستر کتابخانه Dear ImGui پرداخته است. نسخه 0.9 این فریمورک به عنوان نسخهای که تغییرات عمدهای ندارد شناخته شده، اما قابلیتهای فریمورک را تکمیل کرده و مستندات بیشتری به آن افزوده شده است. این افزایش مستندات به توسعهدهندگان کمک میکند تا با استفاده از این ابزار بهترین بهرهبرداری را داشته باشند و بتوانند برنامههای کاربردی GUI قدرتمند و کارآمدی را توسعه دهند.
🟣لینک مقاله:
https://golangweekly.com/link/160773/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Giu 0.9: A Dear ImGui-Based Cross Platform GUI Framework
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته است به توضیح و بررسی نحوه ساخت برنامههای کاربردی گرافیکی (GUI) با استفاده از زبان برنامهنویسی Go بر بستر کتابخانه Dear ImGui پرداخته است. نسخه 0.9 این فریمورک به عنوان نسخهای که تغییرات عمدهای ندارد شناخته شده، اما قابلیتهای فریمورک را تکمیل کرده و مستندات بیشتری به آن افزوده شده است. این افزایش مستندات به توسعهدهندگان کمک میکند تا با استفاده از این ابزار بهترین بهرهبرداری را داشته باشند و بتوانند برنامههای کاربردی GUI قدرتمند و کارآمدی را توسعه دهند.
🟣لینک مقاله:
https://golangweekly.com/link/160773/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - AllenDang/giu: Cross platform rapid GUI framework for golang based on Dear ImGui.
Cross platform rapid GUI framework for golang based on Dear ImGui. - AllenDang/giu
🔵 عنوان مقاله
Watermill: Library for Building Event-Driven Apps
🟢 خلاصه مقاله:
این مقاله به بررسی کتابخانهای برای کار با جریانهای پیام در برنامههای مبتنی بر رویداد میپردازد که امکان پشتیبانی از کانالهای مختلفی مانند Kafka، RabbitMQ، HTTP و حتی binlogs MySQL را فراهم میسازد. این کتابخانه ابزاری قدرتمند برای توسعهدهندگان نرمافزار است تا بتوانند به طور موثرتری اپلیکیشنهای درونران و پاسخگو به رویدادها را بسازند. کاربرد این کتابخانه شامل برقراری ارتباط بین کامپوننتها و سیستمها از طریق جریانهای پیام است که امکان پردازش و تحلیل دادهها را در زمان واقعی فراهم میآورد. دستیابی به این شیوه از ارتباط درون سرویسی این امکان را به توسعهدهندگان میدهد که پیچیدگیهای مدیریت ارتباطات و جریان دادهها را بهینهسازی کنند و بتوانند رابطکاربریهای بیشتر متکی بر اینتراکتیویتی و دادهی مداوم را ارائه دهند. در نهایت، این کتابخانه به فرآیند توسعه اپلیکیشنهای پیچیدهتر و در عین حال کارآمدتر کمک شایانی میکند.
🟣لینک مقاله:
https://golangweekly.com/link/160776/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Watermill: Library for Building Event-Driven Apps
🟢 خلاصه مقاله:
این مقاله به بررسی کتابخانهای برای کار با جریانهای پیام در برنامههای مبتنی بر رویداد میپردازد که امکان پشتیبانی از کانالهای مختلفی مانند Kafka، RabbitMQ، HTTP و حتی binlogs MySQL را فراهم میسازد. این کتابخانه ابزاری قدرتمند برای توسعهدهندگان نرمافزار است تا بتوانند به طور موثرتری اپلیکیشنهای درونران و پاسخگو به رویدادها را بسازند. کاربرد این کتابخانه شامل برقراری ارتباط بین کامپوننتها و سیستمها از طریق جریانهای پیام است که امکان پردازش و تحلیل دادهها را در زمان واقعی فراهم میآورد. دستیابی به این شیوه از ارتباط درون سرویسی این امکان را به توسعهدهندگان میدهد که پیچیدگیهای مدیریت ارتباطات و جریان دادهها را بهینهسازی کنند و بتوانند رابطکاربریهای بیشتر متکی بر اینتراکتیویتی و دادهی مداوم را ارائه دهند. در نهایت، این کتابخانه به فرآیند توسعه اپلیکیشنهای پیچیدهتر و در عین حال کارآمدتر کمک شایانی میکند.
🟣لینک مقاله:
https://golangweekly.com/link/160776/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - ThreeDotsLabs/watermill: Building event-driven applications the easy way in Go.
Building event-driven applications the easy way in Go. - ThreeDotsLabs/watermill
👍1
🔵 عنوان مقاله
▶ Russ Cox on Passing the Torch
🟢 خلاصه مقاله:
راس کاکس، سرپرست سابق تکنولوژی زبان برنامهنویسی Go، به تازگی در پادکست Go Time حضور یافت تا در مورد فرآیند کنارهگیری خود و واگذاری مسئولیتهای خود به رهبر جدید، آستین کلمنتس، صحبت کند. آستین کلمنتس نیز در این پادکست ظاهر شده است، همچنین چری موی که برخی از مسئولیتهای پیشین آستین را به عهده گرفته نیز حضور داشته است. راس در یک پست جداگانه نیز در مورد این تغییرات بیشتر توضیح داده است. اگرچه پادکست یک ساعته است، اما متن کامل آن نیز موجود است. این بحثها نه تنها به انتقال رهبری تمرکز دارد، بلکه به بخشهایی از فرایند توسعه Go و چگونگی تاثیر آن بر جامعه برنامهنویسان پرداخته است.
🟣لینک مقاله:
https://golangweekly.com/link/161016/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
▶ Russ Cox on Passing the Torch
🟢 خلاصه مقاله:
راس کاکس، سرپرست سابق تکنولوژی زبان برنامهنویسی Go، به تازگی در پادکست Go Time حضور یافت تا در مورد فرآیند کنارهگیری خود و واگذاری مسئولیتهای خود به رهبر جدید، آستین کلمنتس، صحبت کند. آستین کلمنتس نیز در این پادکست ظاهر شده است، همچنین چری موی که برخی از مسئولیتهای پیشین آستین را به عهده گرفته نیز حضور داشته است. راس در یک پست جداگانه نیز در مورد این تغییرات بیشتر توضیح داده است. اگرچه پادکست یک ساعته است، اما متن کامل آن نیز موجود است. این بحثها نه تنها به انتقال رهبری تمرکز دارد، بلکه به بخشهایی از فرایند توسعه Go و چگونگی تاثیر آن بر جامعه برنامهنویسان پرداخته است.
🟣لینک مقاله:
https://golangweekly.com/link/161016/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Changelog
Russ Cox on passing the torch with Austin Clements & Cherry Mui (Go Time #333)
In this episode, we will be talking to Russ Cox, who joined the Go team at Google in 2008 and has been the Go project tech lead since 2012, about stepping back & handing over the reins to Austin Clements, who will also join us! We also have Cherry Mui, who…
🙏2😈2
در زبان برنامهنویسی Go، خطای nilness: nil dereference in field selection به این معنی است که شما سعی کردهاید به فیلدی از یک متغیر اشارهگری دسترسی پیدا کنید که مقدار آن nil است. این خطا معمولاً زمانی رخ میدهد که به یک فیلد یا متد از یک اشارهگر nil دسترسی پیدا کنید، و Go به طور ایستا (در زمان کامپایل) شناسایی کرده است که ممکن است این دسترسی منجر به panic شود.
برای رفع این خطا، باید مطمئن شوید که قبل از دسترسی به فیلدها یا متدهای اشارهگر، بررسی کنید که مقدار اشارهگر nil نباشد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
برای رفع این خطا، باید مطمئن شوید که قبل از دسترسی به فیلدها یا متدهای اشارهگر، بررسی کنید که مقدار اشارهگر nil نباشد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🔥3
🔵 عنوان مقاله
Greenmask: Postgres Data Masking and Obfuscation Tool
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته در مورد ابزاری است که با زبان برنامهنویسی Go نوشته شده است. این ابزار برای خروجی گرفتن از پایگاه دادههای Postgres و مخفیسازی دادهها به شکل تعیینشده (deterministic) طراحی شده است. منبعی که برنامه در آن موجود است، GitHub repo، به کاربران امکان میدهد تا کد ابزار را مشاهده و در صورت نیاز تغییر دهند. مخفیسازی دادهها به این صورت است که اطلاعات حساس در دیتابیس در حین خروجی گرفتن تغییر میکنند تا از افشای اطلاعات جلوگیری شود، اما به نحوی که برای توسعهدهندگان قابل استفاده باقی بماند. این عملکرد برای سازمانهایی که به حفظ حریم خصوصی دادهها ملزم هستند بسیار مفید است.
🟣لینک مقاله:
https://golangweekly.com/link/161036/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Greenmask: Postgres Data Masking and Obfuscation Tool
🟢 خلاصه مقاله:
مقالهای که مورد بررسی قرار گرفته در مورد ابزاری است که با زبان برنامهنویسی Go نوشته شده است. این ابزار برای خروجی گرفتن از پایگاه دادههای Postgres و مخفیسازی دادهها به شکل تعیینشده (deterministic) طراحی شده است. منبعی که برنامه در آن موجود است، GitHub repo، به کاربران امکان میدهد تا کد ابزار را مشاهده و در صورت نیاز تغییر دهند. مخفیسازی دادهها به این صورت است که اطلاعات حساس در دیتابیس در حین خروجی گرفتن تغییر میکنند تا از افشای اطلاعات جلوگیری شود، اما به نحوی که برای توسعهدهندگان قابل استفاده باقی بماند. این عملکرد برای سازمانهایی که به حفظ حریم خصوصی دادهها ملزم هستند بسیار مفید است.
🟣لینک مقاله:
https://golangweekly.com/link/161036/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍4
🔵 عنوان مقاله
'When I Told 4,091 Writers They Weren’t Getting Paid..'
🟢 خلاصه مقاله:
مهندسی در یکی از پلتفرمهای محبوب نویسندگی که دارای پیغامهای پرداخت است، داستانی از یک اشکال نرمافزاری خفیف یا وضعیت مسابقهای (race condition) را به اشتراک گذاشته که منجر به دریافت خبرهای ناخواسته بد توسط تعداد زیادی از نویسندگان شد. این موقعیتهای نرمافزاری میتوانند به طور غیرمنتظرهای در محلهای مختلفی ظاهر شوند، و بنابراین شناسایی آنها و درک عواقب ممکن آن اهمیت دارد. آگاهی از چنین اتفاقاتی و داشتن دانش برای تشخیص و حل این موارد میتواند به جلوگیری از زیانهای بیشتر به کاربران و کسبوکارها کمک کند. درک و تحلیل این مثالها برای هر مهندس نرمافزاری ضروری است تا از تکرار این خطاها در آینده پرهیز شود.
🟣لینک مقاله:
https://golangweekly.com/link/161018/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
'When I Told 4,091 Writers They Weren’t Getting Paid..'
🟢 خلاصه مقاله:
مهندسی در یکی از پلتفرمهای محبوب نویسندگی که دارای پیغامهای پرداخت است، داستانی از یک اشکال نرمافزاری خفیف یا وضعیت مسابقهای (race condition) را به اشتراک گذاشته که منجر به دریافت خبرهای ناخواسته بد توسط تعداد زیادی از نویسندگان شد. این موقعیتهای نرمافزاری میتوانند به طور غیرمنتظرهای در محلهای مختلفی ظاهر شوند، و بنابراین شناسایی آنها و درک عواقب ممکن آن اهمیت دارد. آگاهی از چنین اتفاقاتی و داشتن دانش برای تشخیص و حل این موارد میتواند به جلوگیری از زیانهای بیشتر به کاربران و کسبوکارها کمک کند. درک و تحلیل این مثالها برای هر مهندس نرمافزاری ضروری است تا از تکرار این خطاها در آینده پرهیز شود.
🟣لینک مقاله:
https://golangweekly.com/link/161018/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Medium
When I told 4,091 writers they weren’t getting paid
Subtle database errors and how we recovered
👍2