🔴 سناریو استفاده از پکیج context در گولنگ 🔴
❌آموزش در ادامه این مطلب
🟡 introduction
🟢 https://t.me/gopher_academy/697
🟡 RPC call
🟢 https://t.me/gopher_academy/698
🟢 https://t.me/gopher_academy/699
🟡 PipeLine
🟢 https://t.me/gopher_academy/700
🟡 Timeout request
🟢 https://t.me/gopher_academy/701
🟢 https://t.me/gopher_academy/702
🟢 https://t.me/gopher_academy/703
🟢 https://t.me/gopher_academy/704
🟡 HTTP server requests transfer data
🟢 https://t.me/gopher_academy/705
🟢 https://t.me/gopher_academy/706
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌آموزش در ادامه این مطلب
🟡 introduction
🟢 https://t.me/gopher_academy/697
🟡 RPC call
🟢 https://t.me/gopher_academy/698
🟢 https://t.me/gopher_academy/699
🟡 PipeLine
🟢 https://t.me/gopher_academy/700
🟡 Timeout request
🟢 https://t.me/gopher_academy/701
🟢 https://t.me/gopher_academy/702
🟢 https://t.me/gopher_academy/703
🟢 https://t.me/gopher_academy/704
🟡 HTTP server requests transfer data
🟢 https://t.me/gopher_academy/705
🟢 https://t.me/gopher_academy/706
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 سناریو استفاده از پکیج context در گولنگ 🔴 ❌آموزش در ادامه این مطلب 🟡 introduction 🟢 https://t.me/gopher_academy/697 🟡 RPC call 🟢 https://t.me/gopher_academy/698 🟢 https://t.me/gopher_academy/699 🟡 PipeLine 🟢 https://t.me/gopher_academy/700 🟡 Timeout request…
🟡 introduction🟡
در مورد پکیج context
🔵این کتابخانه از ورژن Go1.7 وارد شد
🔵 کاربرد اصلی آن ، در یک جمله ، کنترل چرخه گوروتین ها می یاشد.
🔵هنگامی که یک کار محاسباتی به دست یک goroutine منتقل می شود ، به دلایلی (وقفه زمانی یا خروج اجباری) ، ما می خواهیم کار محاسباتی این goroutine را به حالت تعلیق درآوریم.. پس برای این سناریور های از این قبیل از context استفاده می کنیم
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
در مورد پکیج context
🔵این کتابخانه از ورژن Go1.7 وارد شد
🔵 کاربرد اصلی آن ، در یک جمله ، کنترل چرخه گوروتین ها می یاشد.
🔵هنگامی که یک کار محاسباتی به دست یک goroutine منتقل می شود ، به دلایلی (وقفه زمانی یا خروج اجباری) ، ما می خواهیم کار محاسباتی این goroutine را به حالت تعلیق درآوریم.. پس برای این سناریور های از این قبیل از context استفاده می کنیم
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 سناریو استفاده از پکیج context در گولنگ 🔴 ❌آموزش در ادامه این مطلب 🟡 introduction 🟢 https://t.me/gopher_academy/697 🟡 RPC call 🟢 https://t.me/gopher_academy/698 🟢 https://t.me/gopher_academy/699 🟡 PipeLine 🟢 https://t.me/gopher_academy/700 🟡 Timeout request…
🟡 RPC call 🟡
🟣پروتکل rpc چیست و چه کاربردی دارد؟
🔵پروتکل RPC که مخفف عبارت Remote Procedure Call است یک پروتکل است که یک برنامه می تواند برای درخواست یک سرویس از یک برنامه در یک کامپیوتر دیگر در یک شبکه بدون نیاز به درک جزئیات شبکه استفاده کند. درواقع RPC از مدل client-server استفاده می کند. پروتکل rpc یک نوع پروتکل درخواست است که از سمت کلاینت به یک سرور شناخته شده در محل دیگر ارسال میشود تا یک فرآیند مشخص را با پارامترهای ارایه شده اجرا کند.اگر سرور هم پاسخی به مشتری ارسال کند، برنامه همچنان روند خود را ادامه می دهد.
🟣سرویسهای مهمی که از پروتکل rpc استفاده میکنند:
🔵سرویس NFS (Network File System) یکی از مهمترین کاربران RPC است.
🔵بXML-RPC یک پروتکل RPC است که از XML برای رمزگذاری تماس ها و HTTP به عنوان یک مکانیسم حمل و نقل استفاده می کند.
🔵بJSON-RPC یک پروتکل RPC است که از پیام های کد شده JSON استفاده می کند.
🔵بGoogle Toolkit از یک asynchronous RPC برای برقراری ارتباط با سرور استفاده میکند.
🔵بGoogle Protocol Buffers Buffers شامل یک زبان تعریف رابط استفاده شده برای پروتکل های RPC [12] است از سال 2015 به عنوان gRPC عرضه می شود.
🔵ب Microsoft .NET Remoting امکانات RPC را برای سیستم های توزیع شده در پلت فرم ویندوز ارائه می دهد. این توسط WCF جایگزین شده است.
🔵بMicrosoft DCOM از MSRPC استفاده می کند که بر اساس DCE / RPC است.
🔵بOpen Software Foundation که از DCE / RPC استفاده میکند.
🔵ب(Directory Service Remote Procedure Call (DS-RPC پروتکل پیشفرض، برای intersite replication است.
🔻🔻🔻🔻🔻🔻🔻
در گورتین اصلی 4 RPC وجود دارد.
در واقع RPC 2 / 3 /4 به طور موازی درخواست می شوند.
در اینجا امیدواریم که پس از عدم موفقیت RPC2 خطایی را مستقیماً برگردانیم و RPC3 / 4 محاسبه را متوقف کند.
👇🏻👇🏻code👇🏻👇🏻
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟣پروتکل rpc چیست و چه کاربردی دارد؟
🔵پروتکل RPC که مخفف عبارت Remote Procedure Call است یک پروتکل است که یک برنامه می تواند برای درخواست یک سرویس از یک برنامه در یک کامپیوتر دیگر در یک شبکه بدون نیاز به درک جزئیات شبکه استفاده کند. درواقع RPC از مدل client-server استفاده می کند. پروتکل rpc یک نوع پروتکل درخواست است که از سمت کلاینت به یک سرور شناخته شده در محل دیگر ارسال میشود تا یک فرآیند مشخص را با پارامترهای ارایه شده اجرا کند.اگر سرور هم پاسخی به مشتری ارسال کند، برنامه همچنان روند خود را ادامه می دهد.
🟣سرویسهای مهمی که از پروتکل rpc استفاده میکنند:
🔵سرویس NFS (Network File System) یکی از مهمترین کاربران RPC است.
🔵بXML-RPC یک پروتکل RPC است که از XML برای رمزگذاری تماس ها و HTTP به عنوان یک مکانیسم حمل و نقل استفاده می کند.
🔵بJSON-RPC یک پروتکل RPC است که از پیام های کد شده JSON استفاده می کند.
🔵بGoogle Toolkit از یک asynchronous RPC برای برقراری ارتباط با سرور استفاده میکند.
🔵بGoogle Protocol Buffers Buffers شامل یک زبان تعریف رابط استفاده شده برای پروتکل های RPC [12] است از سال 2015 به عنوان gRPC عرضه می شود.
🔵ب Microsoft .NET Remoting امکانات RPC را برای سیستم های توزیع شده در پلت فرم ویندوز ارائه می دهد. این توسط WCF جایگزین شده است.
🔵بMicrosoft DCOM از MSRPC استفاده می کند که بر اساس DCE / RPC است.
🔵بOpen Software Foundation که از DCE / RPC استفاده میکند.
🔵ب(Directory Service Remote Procedure Call (DS-RPC پروتکل پیشفرض، برای intersite replication است.
🔻🔻🔻🔻🔻🔻🔻
در گورتین اصلی 4 RPC وجود دارد.
در واقع RPC 2 / 3 /4 به طور موازی درخواست می شوند.
در اینجا امیدواریم که پس از عدم موفقیت RPC2 خطایی را مستقیماً برگردانیم و RPC3 / 4 محاسبه را متوقف کند.
👇🏻👇🏻code👇🏻👇🏻
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 سناریو استفاده از پکیج context در گولنگ 🔴 ❌آموزش در ادامه این مطلب 🟡 introduction 🟢 https://t.me/gopher_academy/697 🟡 RPC call 🟢 https://t.me/gopher_academy/698 🟢 https://t.me/gopher_academy/699 🟡 PipeLine 🟢 https://t.me/gopher_academy/700 🟡 Timeout request…
🟡 PipeLine 🟡
🔵درواقع pipeline، مجموعهای از عناصر (مراحل) پردازش داده است که به صورت سری به یکدیگر متصلند و ورودی هر عنصر، خروجی عنصر قبلی است.
🔵در تکنیک pipeline، چند دستور میتوانند در یک زمان اجرا شوند. یعنی دستورها از لحاظ زمان اجرا دارای همپوشانی هستند.
🔵خوب برای اینکه با مفهوم PipeLine بیشتز آشنا شید لینک زیر رو باز کنید که در ادامه میخوام توضیح بدم
🔻 https://gist.github.com/claudiofahey/3afcf4f4fb3d8d3b35cadb100d4fb9b7
مدل PipeLine مدل خط assembly است. چندین workers در خط assembly کردن محصول دارند و یکی یکی جمع می شوند.
در حقیقت ، اجرای مدل خط لوله هیچ ارتباطی با زمینه ندارد. همچنین می توانیم از chan برای پیاده سازی مدل خط لوله بدون زمینه استفاده کنیم. اما برای کنترل کل خط لوله ، استفاده از Context ضروری است.
سه کارگر خط لوله در runSimplePipeline وجود دارد. lineListSource وظیفه تقسیم و انتقال پارامترها را یک به یک دارد. lineParser وظیفه پردازش رشته به int64 را دارد. سینک در مورد در دسترس بودن داده ها با توجه به مقدار خاص قضاوت می کند. تمام مقادیر بازگشتی آنها اساساً دارای دو تعویض هستند ، یکی برای انتقال داده ها و دیگری برای عبور خطاها.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔵درواقع pipeline، مجموعهای از عناصر (مراحل) پردازش داده است که به صورت سری به یکدیگر متصلند و ورودی هر عنصر، خروجی عنصر قبلی است.
🔵در تکنیک pipeline، چند دستور میتوانند در یک زمان اجرا شوند. یعنی دستورها از لحاظ زمان اجرا دارای همپوشانی هستند.
🔵خوب برای اینکه با مفهوم PipeLine بیشتز آشنا شید لینک زیر رو باز کنید که در ادامه میخوام توضیح بدم
🔻 https://gist.github.com/claudiofahey/3afcf4f4fb3d8d3b35cadb100d4fb9b7
مدل PipeLine مدل خط assembly است. چندین workers در خط assembly کردن محصول دارند و یکی یکی جمع می شوند.
در حقیقت ، اجرای مدل خط لوله هیچ ارتباطی با زمینه ندارد. همچنین می توانیم از chan برای پیاده سازی مدل خط لوله بدون زمینه استفاده کنیم. اما برای کنترل کل خط لوله ، استفاده از Context ضروری است.
سه کارگر خط لوله در runSimplePipeline وجود دارد. lineListSource وظیفه تقسیم و انتقال پارامترها را یک به یک دارد. lineParser وظیفه پردازش رشته به int64 را دارد. سینک در مورد در دسترس بودن داده ها با توجه به مقدار خاص قضاوت می کند. تمام مقادیر بازگشتی آنها اساساً دارای دو تعویض هستند ، یکی برای انتقال داده ها و دیگری برای عبور خطاها.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 سناریو استفاده از پکیج context در گولنگ 🔴 ❌آموزش در ادامه این مطلب 🟡 introduction 🟢 https://t.me/gopher_academy/697 🟡 RPC call 🟢 https://t.me/gopher_academy/698 🟢 https://t.me/gopher_academy/699 🟡 PipeLine 🟢 https://t.me/gopher_academy/700 🟡 Timeout request…
🟡 Timeout request 🟡
🔵جهت مدیریت زمانی درخواست هامون از این روش استفاده می کنیم
🔵در زیر نمونه چند کد رو براتون میزارم
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔵جهت مدیریت زمانی درخواست هامون از این روش استفاده می کنیم
🔵در زیر نمونه چند کد رو براتون میزارم
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 سناریو استفاده از پکیج context در گولنگ 🔴 ❌آموزش در ادامه این مطلب 🟡 introduction 🟢 https://t.me/gopher_academy/697 🟡 RPC call 🟢 https://t.me/gopher_academy/698 🟢 https://t.me/gopher_academy/699 🟡 PipeLine 🟢 https://t.me/gopher_academy/700 🟡 Timeout request…
🟡 HTTP server requests transfer data 🟡
🔵درواقع context ساختار داده های valueCtx را فراهم می کند.
🔵سناریوی متداول استفاده شده از این مقدارCtx انتقال مقداری خاص از درخواست در سرور http است ،
🔵به عنوان مثال یک میان افزار وجود دارد که تأیید کوکی را انجام می دهد و سپس نام کاربری تأیید شده را در درخواست ذخیره می کند.
🔵نکته ای که هنگام استفاده از ValueCtx باید به آن توجه کنید این است که کلید در اینجا نباید روی نوع String یا Int تنظیم شود تا از رونویسی میان افزارهای مختلف این کلید جلوگیری شود.
🔵بهترین حالت این است که هر میان افزار از یک نوع کلید سفارشی مانند FooKey در اینجا استفاده می کند و منطق به دست آوردن مقدار باید تا حد ممکن به عنوان یک تابع استخراج شده و در بسته میان افزار قرار گیرد.
🔵 به این ترتیب ، مشکل تعارض تنظیم یک کلید در بسته های مختلف جلوگیری می شود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔵درواقع context ساختار داده های valueCtx را فراهم می کند.
🔵سناریوی متداول استفاده شده از این مقدارCtx انتقال مقداری خاص از درخواست در سرور http است ،
🔵به عنوان مثال یک میان افزار وجود دارد که تأیید کوکی را انجام می دهد و سپس نام کاربری تأیید شده را در درخواست ذخیره می کند.
🔵نکته ای که هنگام استفاده از ValueCtx باید به آن توجه کنید این است که کلید در اینجا نباید روی نوع String یا Int تنظیم شود تا از رونویسی میان افزارهای مختلف این کلید جلوگیری شود.
🔵بهترین حالت این است که هر میان افزار از یک نوع کلید سفارشی مانند FooKey در اینجا استفاده می کند و منطق به دست آوردن مقدار باید تا حد ممکن به عنوان یک تابع استخراج شده و در بسته میان افزار قرار گیرد.
🔵 به این ترتیب ، مشکل تعارض تنظیم یک کلید در بسته های مختلف جلوگیری می شود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔸استخدام برنامهنویس Golang در شرکت کارخانه نوآوری #تهران
🔹حقوق بیش از ۱۲ میلیون تومان 🔹تماموقت 🔹ارشد (Senior)
🔗 https://quera.ir/r/jFkDfY
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔹حقوق بیش از ۱۲ میلیون تومان 🔹تماموقت 🔹ارشد (Senior)
🔗 https://quera.ir/r/jFkDfY
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
محتوای کانال رو بیشتر دوس دارید به چه صورت منتشر بشه؟
Final Results
54%
مقاله ای باشه
57%
ویدیویی باشه
26%
نظری ندارم همین جوری خوبه
Gopher Academy
🔰موضوع ارائه: مروری بر ریزهکاریهای اینترفیس error در زبان Go🔰 در این دورهمی مروری نسبتا عمیق روی اینترفیس error در زبان Go خواهیم داشت و با هم سعی میکنیم با ماهیت، ریزهکاریها و روشهای متنوع استفاده از این اینترفیس آشنا بشیم. در انتها نیز زمانی رو برای…
👆🏻👆🏻👆🏻👆🏻
🔴دوستان ویدیوی ارائه از این آدرس در دسترسه.🔴
🔰موضوع ارائه: مروری بر ریزهکاریهای اینترفیس error در زبان Go🔰
https://youtu.be/Tz3ysr8salw
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔴دوستان ویدیوی ارائه از این آدرس در دسترسه.🔴
🔰موضوع ارائه: مروری بر ریزهکاریهای اینترفیس error در زبان Go🔰
https://youtu.be/Tz3ysr8salw
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
👆🏻👆🏻👆🏻👆🏻 🔴دوستان ویدیوی ارائه از این آدرس در دسترسه.🔴 🔰موضوع ارائه: مروری بر ریزهکاریهای اینترفیس error در زبان Go🔰 https://youtu.be/Tz3ysr8salw ➖➖➖➖➖➖➖➖➖ 🔰 @gopher_academy
👆🏻👆🏻👆🏻👆🏻
🔴در تکمیل ارائه تون، پیشنهاد میکنم دوستان حتما این ارائه رو هم ببینن، خیلی کمک میکنه تو production که خیلی error handling مفیدی داشته باشیم و بتونیم راحت کوئری بزنیم
🔴در واقع کاری که میکنه تعریف یه custom error هست با این تفاوت که یک سری فیلدهای ضروری مثل operation و kind رو استفاده میکنه که خیلی اطلاعات مفیدی درباره خطای رخ داده، نوعش و سرویس و متدی که اتفاق افتاده میده
https://www.youtube.com/watch?v=4WIhhzTTd0Y
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔴در تکمیل ارائه تون، پیشنهاد میکنم دوستان حتما این ارائه رو هم ببینن، خیلی کمک میکنه تو production که خیلی error handling مفیدی داشته باشیم و بتونیم راحت کوئری بزنیم
🔴در واقع کاری که میکنه تعریف یه custom error هست با این تفاوت که یک سری فیلدهای ضروری مثل operation و kind رو استفاده میکنه که خیلی اطلاعات مفیدی درباره خطای رخ داده، نوعش و سرویس و متدی که اتفاق افتاده میده
https://www.youtube.com/watch?v=4WIhhzTTd0Y
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔴مواردی که با رعایت کردن اون ها برنامه ی گولنگی شما عملکرد بهتری می تونه داشته باشه🔴
🔵Benchmarking
🔵Profiling
🔵Compiler optimisations
🔵Understanding the execution tracer
🔵Memory management and GC tuning
🔵Concurrency
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔵Benchmarking
🔵Profiling
🔵Compiler optimisations
🔵Understanding the execution tracer
🔵Memory management and GC tuning
🔵Concurrency
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
یکی از دوستان توی تویتتر بهم گفت برای اینکه محصولات jetbrains رو کرک کنی و بعد ۳۰ روز expair نشه میتونی از ide eval resetter استفاده کنی
شما دوستان از این روش استفاده کردید آیا؟
این ide eval resetter رو می تونید سرچ بزنید توی گیت هاب هست کدش با جاوا هست
شما دوستان از این روش استفاده کردید آیا؟
این ide eval resetter رو می تونید سرچ بزنید توی گیت هاب هست کدش با جاوا هست
Final Results
41%
اره استفاده کردم - جواب داد
2%
استفاده کردم- جواب نداد
37%
فعلن استفاده نکردم
27%
از jetbrains برای کد زدن استفاده نمی کنم
🟡یکی از اعضای محترم کانال بهم پیام داده گفته از این روش میشه استفاده کرد🟡
❌روش خلاصی از ۳۰ روز expair شدن jetbrains❌
🔴من استفاده کردم جواب داد
✅اینم روشش
🔵 rm -rf ~/.config/JetBrains/GoLand2020.3/eval/GoLand203.evaluation.key
🔵 rm -rf ~/.config/JetBrains/GoLand2020.3/options/other.xml
🔵 rm -rf ~/.java/.userPrefs/jetbrains/goland/
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌روش خلاصی از ۳۰ روز expair شدن jetbrains❌
🔴من استفاده کردم جواب داد
✅اینم روشش
🔵 rm -rf ~/.config/JetBrains/GoLand2020.3/eval/GoLand203.evaluation.key
🔵 rm -rf ~/.config/JetBrains/GoLand2020.3/options/other.xml
🔵 rm -rf ~/.java/.userPrefs/jetbrains/goland/
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔴آشنایی با Test Coverage در گولنگ و نحوه تست آن🔴
❌در ادامه آموزش خواهیم داد
🔵 واسه شروع کار این سه پست زیر رو اول بخونید
🔵 Code Coverage / Test Coverage / Branch Coverage / Path Coverage
🟡 https://t.me/gopher_academy/397
🟡 https://t.me/gopher_academy/398
🟡 https://t.me/gopher_academy/399
🔵Checking Test Coverage
🟡 https://t.me/gopher_academy/719
🔵 sample main.go
🟡 https://t.me/gopher_academy/720
🔵 sample main_test.go
🟡 https://t.me/gopher_academy/721
🔵 Using the -cover flag
🟡 https://t.me/gopher_academy/722
🔵 Visualizing Coverage
🟡 https://t.me/gopher_academy/723
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌در ادامه آموزش خواهیم داد
🔵 واسه شروع کار این سه پست زیر رو اول بخونید
🔵 Code Coverage / Test Coverage / Branch Coverage / Path Coverage
🟡 https://t.me/gopher_academy/397
🟡 https://t.me/gopher_academy/398
🟡 https://t.me/gopher_academy/399
🔵Checking Test Coverage
🟡 https://t.me/gopher_academy/719
🔵 sample main.go
🟡 https://t.me/gopher_academy/720
🔵 sample main_test.go
🟡 https://t.me/gopher_academy/721
🔵 Using the -cover flag
🟡 https://t.me/gopher_academy/722
🔵 Visualizing Coverage
🟡 https://t.me/gopher_academy/723
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴آشنایی با Test Coverage در گولنگ و نحوه تست آن🔴 ❌در ادامه آموزش خواهیم داد 🔵 واسه شروع کار این سه پست زیر رو اول بخونید 🔵 Code Coverage / Test Coverage / Branch Coverage / Path Coverage 🟡 https://t.me/gopher_academy/397 🟡 https://t.me/gopher_academy/398…
🔵Checking Test Coverage🔵
مقیاسی است که مشخص می کند چه تعداد test case وجود دارد و آیا این test case ها تمام functionality سیستم را مورد تست قرار می دهند به عبارت دیگر چند درصد از functionality سیستم توسط test case ها مورد تست قرار گرفته است.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
مقیاسی است که مشخص می کند چه تعداد test case وجود دارد و آیا این test case ها تمام functionality سیستم را مورد تست قرار می دهند به عبارت دیگر چند درصد از functionality سیستم توسط test case ها مورد تست قرار گرفته است.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy