Go Developer Roadmap part 3

Go Developer Roadmap part 3در این مقاله که سری سوم و نهایی از مسیری در جهت تبدیل شدن به یک توسعه دهنده گولنگ را نشان می دهد. که یک توسعه دهنده گولنگ باید چه چیز های یاد بگیرد. پس با ما همراه باشید. شما می توایند قسمت اول و قسمت دوم را از این جا بخوانید.سرفصل بخش اول شامل موارد زیر هستTestingTask SchedulingMicroServicesDesign Patternsخوشحال میشم اگه چیزی از قلم افتاده توی همین پست برام کامنت کنید.و در ضمن ما رو توی گیت هاب دنبال کنید۱. ابزار های Testingقبل اینکه با ابزار ها آشنا بشیم یه توضیح بدم که در واقع تست نویسی یکی از اصول مهم در برنامه نویسی هست که اکثر برنامه نویس های ایرانی ازش فراری هستن خوب در واقع تست نویسی این اطمینان را حاصل می کند که عملکرد مناسبی از برنامه تولید شود . این موضوع یکی از مهم ترین مراحل در در فرآیند تولید یک محصول است.به هیچ وجه نمی توان بدون تست یک محصول رو به بازار فرستاد.چرا باید تست بنویسیم؟تست باعث می شود نقص یا خطایی که ممکن است در مرحله توسعه ایجاد شود،شناسایی و برطرف گردد.موفقیت هر محصول با کیفیت و قابلیت اطمینان مشتری در مورد آن محصول ارزیابی می شود.برای ارائه نرم افزارهایی با کیفیت بالا، تست مناسب لازم و ضروری است. برای طراحی هر نرم افزاری هزینه های زیادی در مرحله توسعه ، بازاریابی و … شده است.بنابراین مهم است که یک برنامه نتایج مثبتی برای جلوگیری از هزینه های ناخواسته یا ناگهانی داشته باشد.اگر برنامه شما در بعضی قسمت ها مشکل داشته باشد باعث نارضایتی کاربر و ترک برنامه شما خواهد شد.برای تحکیم جایگاه خود در بازار ، عملکرد نرم افزار باید واقعاً خوب و بادوام باشد. این نوع اطمینان فقط با روشهای مناسب تست قابل دستیابی است.با کمک تست می توان امنیت کلی نرم افزار را بهبود بخشید.انواع تست ها در برنامه نویسیالبته نوع های مختلف دیگه ای هم هست اما ن توی این مقاله چندتا رو توضیح میدم که توی پکیج های گولنگ مورد استفاده قرار می گیرند.تست unit این تست قطعه کوچکی از کد که نیازمند به کد ها و یا ابجکت های زیادی نیست , مثل یک متد و یا یک کلاس برای تست که نیازمند آبجکت ها و یا کلاس های دیگر و یا توابع دیگر نیستند , دقت کنید که گفتیم زیاد نه اینکه یک کلاس وابسته به کلاس دیگری برای ران شدن باشد و ما این را یونیت تست صدا نزنیم , نه! این اشتباه است ما قطعه کوچک را باید در نظر بگیریم و اگر کد بزرگی داشتیم قطعا از متد های دیگر استفاده خواهیم کرد .تست integrationتستی که در برگیرنده چند واحد کد است و منظورمان چند کلاس و متد و… است . و معمولا بیشتر از یونیت تستینگ وقت گیر است چراکه complexity برنامه بالا رفته است و شما باید چند واحد را تست کنید و قطعا مشخص است که یونیت تستینگ وقت کمتری را خواهد گرفت .تست behaviorتوسعه رفتار محور تکنیک‌ها و قواعد اساسی، توسعه آزمون محور را با ایده‌های طراحی دامنه محور و تجزیه و تحلیل و طراحی شی گرا ادغام می‌کند تا برای تیم‌های توسعه و مدیریت نرم‌افزار، ابزارها و فرایندهای مشترکی برای همکاری در توسعه نرم‌افزار ارائه کند.معرفی ابزار های تست Unit, Behavior, Integrationابزار GoMockاین ابزار یک چارچوب mocking برای زبان برنامه نویسی Go است. که با بسته داخلی Go ساخته شده است.ابزار Testifyبی شک در این لیست این ابزار یکی از بهترین ابزار ها هست که متد های مختلفی و میتونید رو کد خودتون تست کنید.ویژگی ها:Easy assertionsMockingTesting suite interfaces and functionsابزار GinkGoیک نوع تست برای تست های BDD محصوب می شود.ابزار GoMegaیک نوع تست برای تست های BDD محصوب می شود.ابزار GoDogیک نوع تست برای تست های BDD محصوب می شودابزار GoConveyیک نوع تست که به صورت محیط ui تست های شمارو نشون میده. اینم لینک ویدیوویژگی ها:Directly integrates with go testFully-automatic web UI (works with native Go tests, too)Huge suite of regression testsShows test coverage (Go 1.2+)Readable, colorized console output (understandable by any manager, IT or not)Test code generatorDesktop notifications (optional)Immediately open problem lines in Sublime Text (some assembly required)۲. ابزارهای Task Schedulingاین ابزار ها که از اسمشان پیداست وظیفه مدیریت و زمانبدی وظابف رو دارن ابزار Gronکرون جاب ها در گولنگ می باشد.ویژگی ها:Minimalist APIs for scheduling jobs.Thread safety.Customizable Job Type.Customizable Schedule.ابزار JobRunnerاین ابزار چارچوبی برای انجام کار به صورت غیر همزمان می باشد.و برنامه ریزی و صف بندی توابع برای پردازش در زمان مشخص با Cron همراه میسازد.۳. ابزار های MicroServicesابزار های Message-Brokerابزار RabbitMQاین ابزار یک نرم افزار صف بندی پیام به نام واسطه‌ی پیام یا مدیریت صف است. بطور ساده، نرم افزاری است که در آن صف‌ها می‌توانند تعریف شوند، برنامه‌ها ممکن است به صف متصل شده و یک پیام به آن انتقال دهند.ابزار Apache Kafkaکافکا برای مواجهه با انبوهی از داده ها که بی وقفه در حال ارسال هستند و شما فرصت کافی برای پردازش و ذخیره سازی آنها نداشته باشید تولید شده است.کافکا برای استفاده در پروژه های زمان واقعی (real-time) به منظور فراهم آوردن خط لوله داده ها و جریان برنامه های استفاده می شود. کافکا به صورت افقی مقیاس پذیر، مقاوم در برابر خطاو بسیار سریع است. و در تولیدات هزاران شرکت استفاده می شود.ابزار ActiveMQاین نرم افزار محبوب و قدرتمند یک نرم افزار کدباز پیام رسانی و سرویس دهنده تجمیع کننده الگوها می باشد. این نرم افزار بسیار سریع بوده و بسیاری از زبانهای مبتنی بر ایستگاه کاری و پروتکل های مختلف را پشتیبانی می نماید. این نرم افزار به صورت بسیار کاربر پسند و حرفه ای، الگوهای تجاری را تجمیع می نماید. ActiveMQ قابلیت های پیشرفته ای در خود گنجانده است. همچنین نسخه جدید این نرم افزار ازJMS 1.1 و J2EE 1.4 پشتیبانی می نماید . این نرم افزار تحت مجوز Apache 2.0 License انتشار می نمایدابزار Azure Service Busدر واقع این ابزار ارتباطات ابری قابل‌اطمینان بین برنامه‌ها و پایگاه‌های داده را فراهم می‌کند و پیام را به عنوان یک سرویس (MaaS) ارایه می‌دهد.ابزار Building message-drivenابزار Watermillاین ابزار یک کتابخانه برای جریان های پیام می باشد. این ابزار برای ساخت برنامه های مبتنی بر رویدادها ، فعال کردن منابع برای رویدادها ، RPC از طریق پیام ها ،و هر چیز دیگری به ذهن شما خطور می کند. در ضمن شما می توانید با استفاده از ابزار های متداولی مانند کافکا یا RabbitMQ ، بلکه HTTP یا MySQL استفاده کنید.ویژگی ها:Easy to understand.Universal - event-driven architecture, messaging, stream processing, CQRS - use it for whatever you need.Fast (see Benchmarks).Flexible with middlewares, plugins and Pub/Sub configurations.Resilient - using proven technologies and passing stress tests (see Stability).ابزار های Frameworksابزار GoKitاین فرم ورک برای ساخت برنامه های که مبتنی بر میکروسرویس می باشند عمل می کند.ویژگی ها:Operate in a heterogeneous SOA — expect to interact with mostly non-Go-kit servicesRPC as the primary messaging patternPluggable serialization and transport — not just JSON over HTTPOperate within existing infrastructures — no mandates for specific tools or technologiesابزار Microاین فرم ورک برای ساخت برنامه های توزیع شده می باشد.ویژگی ها:AuthenticationDynamic ConfigData StorageService DiscoveryLoad BalancingMessage EncodinggRPC TransportAsync MessagingSynchronizationPluggable Interfacesابزار rpcxیک چارچوب سریع برای میکرو سرویسهای دو طرفه چند زبانهویژگی ها:Support raw Go functions. There's no need to define proto files.Pluggable. Features can be extended such as service discovery, tracing.Support TCP, HTTP, QUIC and KCPSupport multiple codecs such as JSON, Protobuf, MessagePack and raw bytes.Service discovery. Support peer2peer, configured peers, zookeeper, etcd, consul and mDNS.Fault tolerance：Failover, Failfast, Failtry.Load banlancing：support Random, RoundRobin, Consistent hashing, Weighted, network quality and Geography.Support Compression.Support passing metadata.Support Authorization.Support heartbeat and one-way request.Other features: metrics, log, timeout, alias, circuit breaker.Support bidirectional communication.Support access via HTTP so you can write clients in any programming languages.Support API gateway.Support backup request, forking and broadcast.ابزار های RPCابزار Protocol Buffersدرمورد این ابزار و نحو کارکرد آن این مقاله آموزش صفر تا ۵۰ پروتوبافر رو بخونید.ابزار gRPC-Goدرمورد این ابزار و نحو کارکرد آن این مقاله gRPC چیه و چطور کار میکنه؟ رو بخونید.۴. الگو های طراحیدر واقع Design Patternها در زمان طراحی سیستم های نرم افزاری و یا فرایند تولید جواب بسیار مورد توجه قرار می گیرد. الگوها سر و صدای زیادی به پا کرده است. از طرفی ممکن است در استفاده از آن ها دچار سردرگمی بشویم. اساساً با سوالات زیر مواجه خواهیم بود:در وافع Design Pattern چیه؟چرا باید از Design Patternها استفاده کنیم اصلن؟چه زمانی باید از Design Patternها استفاده کنیم؟در واقع Design Pattern چیه؟در واقع Design Patternها یکسری جواب های ثابت شده به مشکلات رایج در طراحی هستند. به وسیله آنها می توان یکسری راهکار برای حل مسائل بازگشتی در طراحی برنامه تعریف کرد.به طور واضح، Design Patternها کدهای آماده ای نیستند که بتوان مستقیماً از آن ها استفاده کرد. اما یسکری رویکرد یا نظریه برای حل چالش های عادی طراحی ارائه می دهند.چرا باید از Design Patternها استفاده کنیم؟باید از design pattern ها برای طراحی و توسعه اجزاء (componentها) ای استفاده کنیم که مجدداً قابل استفاده و مقیاس پذیر بوده باشند و به تیم برنامه نویسی کمک کنند تا عملیات توسعه در زمان مقرر و با کیفیت بالاتری به انجام برسد.طراحی یک برنامه به شکل استاندارد یا تست شده به سایر توسعه دهنده گان و کسانی که کدهای برنامه را قرار است مرور کنند، اجازه می دهد به راحتی مفهوم کدهای نوشته شده را درک کنند.چه زمانی باید از Design Patternها استفاده کنیم؟استفاده از Design Patternها بدون ارزیابی صحیح باعث پیچیدگی غیر ضروری الگو می شود. در شرایطی که به آنها احتیاج ندارید می توانید با استفاده از اصول ساده طراحی OOP کار خود را به جلو ببرید.اینکه چه زمانی از آنها استفاده کنیم و یا چه زمانی استفاده نکنیم به خودمان بستگی دارد. هر الگو درباره یک مشکل طراحی صحبت میکند و یک راه حل استاندارد برای آن ارائه می دهد. بنابراین قبل از استفاده از آنها کمی وقت برای تجزیه و تحلیل مسائل طراحی صرف کنید و سعی کنید آن را با توصیف های الگو تطبیق دهید.به خاطر داشته باشید که نکته کلیدی در پیدا کردن الگوی صحیح، شناسایی و درک سناریویی است که هر الگویی سعی میکند به آن دست یابد.به محض اینکه الگوی مناسب برای مسئله یا سناریوی خاص شما مشخص شد، می توانید از آن در طراحی نرم افزار خود استفاده کنید.یه چندتا منابع مبزارم براتون برای کاری با الگو ها در گولنگhttps://github.com/tmrts/go-patternshttps://golangbyexample.com/all-design-patterns-golang/