Go Developer(gopher-academy.ir)
Go Developer Roadmap part 2
در این مقاله که سری دوم از مسیری در جهت تبدیل شدن به یک توسعه دهنده گولنگ را نشان می دهد. که یک توسعه دهنده گولنگ باید چه چیز های یاد بگیرد. پس با ما همراه باشید. شما می توایند قسمت اول را از این جا بخوانید.
سرفصل بخش اول شامل موارد زیر هست
- Caching
- Logging
- Real-Time Communication
- API Clients
- Good to Know
خوشحال میشم اگه چیزی از قلم افتاده توی همین پست برام کامنت کنید.
و در ضمن ما رو توی گیت هاب دنبال کنید
۱. ابزارهای caching
اولش یه توضیح بدیم که این کش ها کارشون چیه با یه مثال
خودِ کلمهی Cache به معنای پنهان کردن یا چیزی است که برای کاربردهای آتی ذخیره و پنهان شده است. مثلاً به غذایی که حیوانات در زمستان ذخیره و پنهان میکنند تا بعداً استفاده کنند، Cache گفته میشود. اصطلاح کش در دنیای کامپیوتر، همزمان با تلاش برای افزایش کارایی CPU (پردازندههای مرکزی کامپیوترها) به صورت گسترده رواج پیدا کرد.
در واقع کش یک لایه ذخیره سازی داده با سرعت بالا است که مجموعه ای از داده ها را ذخیره می کند، با این هدف که پاسخ گویی به درخواست ها با سرعت بیشتری انجام شود. به طور کلی داده ها در کش، در سخت افزار با دسترسی سریع مانند RAM (حافظه با دسترسی تصادفی) ذخیره می شود تا امکان استفاده از داده های کش شده با سرعت بالا فراهم باشد. هدف اولیه Cache افزایش بازده داده ها با کاهش نیاز به دسترسی به لایه ذخیره سازی با سرعت پایین تر(مانند Hard Disk )است. در واقع Cache ها در لایه های مختلفی مانند سیستم عامل ها، لایه های شبکه از جمله NetNews ، تحویل محتوا (CDN) و DNS، برنامه های کاربردی وب و پایگاه های داده استفاده می شود.
۱-۱. کتابخانه gcache
یک کتابخانه کش برای گولنگ. این کتابخانه از کش ، LFU ، LRU و ARC استفاده می کند.
ویژگی های این کتابخانه
- از کش ، LFU ، LRU و ARC پشتیبانی می کند.
- گوروین امن.
۱-۲. کتابخانه go-redis
نوع امن Redis برای Golang می باشد این کتابخانه
ویژگی های این کتابخانه
- Redis 3 commands except QUIT, MONITOR, SLOWLOG and SYNC
- Automatic connection pooling with circuit breaker support
- Pub/Sub
- Transactions
- Pipeline and TxPipeline
- Scripting
- Timeouts
- Redis Sentinel
- Redis Cluster
- Cluster of Redis Servers without using cluster mode and Redis Sentinel
- Ring
- Instrumentation
۱-۳. کتابخانه gomemcache
نوع memcache برای Golang می باشد این کتابخانه
یه تغریفی هم از Memcached داشته باشیم
به زبان ساده تر Memcached یک نرم افزار برای انجام عملیات کش روی سرورهای وب سایت های Dynamic هست که باعث میشه از منابعتون بهتر و بهینه تر استفاده کنید . نرم افزار Memcached بصورت Open Source ارائه شده و مکانیزم کش کردن Object ها و به ویژه Query ها رو در Dynamic وب سایت ها بر عهده داره تا سرعتشون رو بالا ببره . با استفاده از Memcached تعداد دفعات دسترسی به پایگاه داده شما کم میشه و سرعت پاسخگویی وب سایت شما بالا می ره . در Memcached مکانیزم هایی برای منقضی شدن Object های کش شده و البته پاسخ های بازگشتی به کاربر دیده شده که اگر محتوایی تغییر می کنه یا نتیجه ای باید تغییر کنه بلافاصله اینکار انجام بشه و نتایج اشتباه به کاربر نمایش داده نشه .
۲. ابزار های Logging
۲-۱. کتابخانه های نوع Log Frameworks
کتابخانه Zap
یک سیستم سریع و ساختار ی رو ارایه می کند.در واقع Zap یک رویکرد متفاوت را اتخاذ می کند. این کتابخانه شامل یک رمزگذار JSON است و بر پایه Logger تلاش می کند تا از هر جایی که امکان پذیر باشد از سرریز سریال و تخصیص آن جلوگیری کند.
کتابخانه ZeroLog
بسته zerolog یک چارچوب سریع و ساده را به خروجی JSON اختصاص می دهد.
در واقع API Zerolog به گونه ای طراحی شده است که هم یک تجربه توسعه دهنده عالی داشته باشد و هم عملکرد خیره کننده ای داشته باشد. و همچنین برای ساده نگه داشتن پایه کد فقط روی ورود به سیستم ساختاری کارآمد تمرکز دارد.
کمپانی ها و پروژه های که از این کتابخانه استفاده می کنند.
- Netflix
- Publica
- Alvalor
- Zumata
- pomerium
- AjoCard
- Eurotel
- Arquivei
- ownCloud
- SafeCrow
- Unity
- Productsup
- ForChange (风变科技)
- BetMakers
- Holda
- M3, inc
ویژگی های این کتابخانه
- Blazing fast
- Low to zero allocation
- Level logging
- Sampling
- Hooks
- Contextual fields
context.Context
integrationnet/http
helpers- JSON and CBOR encoding formats
- Pretty logging for development
۲-۲. ابزارهای Log Management System
ابزار Sentry.io
این ابزار مانیتورینگ خطا انجام می دهد یعنی خطاها را الویت بندی می کند
ابزار Loggly.com
تجزیه و تحلیل ورود به سیستم و نظارت بر ورود به سیستم و مسائل مربوط به عملکرد را با ردیابی و به یکدیگر سریعتر حل کنید
۲-۳. ابزار های نوعDistributed Tracing
ابزار Jaeger
نظارت و عیب یابی در سیستم های پیچیده توزیع شده
۳. ابزار Real-Time Communication
۳-۱. ابزار Socket.IO
در واقع Socket.IO در واقع یکی از کتابخانه های جاوا اسکریپت است که یک ارتباط دو طرفه (رفت و برگشتی) بین کلاینت و سرور برقرار می کند و از دو قسمت تشکیل می شود! کتابخانه سمت کلاینت که در مرورگر اجرا شده و دیگری ، کتابخانه سمت سرور بر پایه Node.js است که دارای یک API برای ارتباط با یکدیگر هستند.
۴. کتابخانه های API Clients
مفوهمREST
رست (به انگلیسی REST) مخفف REpresentational State Transfer یکی از محبوبترین استانداردهای معماری API هست که روی فیلدینگ (Roy Fielding) در پایان نامه دکترای خودش معرفی کرد. این استاندارد تشویق میکنه لایه بکاند کاملا از فرانتاند جدا کنیم، این استاندارد یک سری قوانین وضع کرده
برای اطلاعات بیشتر این مقاله رو بخونید رست VS گرافکیوال
۴-۱. کتابخانه Gentleman
این کتابخانه از اصول توسعه پذیری و ترکیب استفاده می کند تا روشی انعطاف پذیر برای ایجاد آسان لایه های HTTP بر اساس پلاگین های داخلی فراهم کند که می توانید در کلاینت های HTTP ثبت نام کرده و از آن استفاده مجدد کنید.
ویژگی های این کتابخانه:
- Plugin driven architecture.
- Simple, expressive, fluent API.
- Idiomatic built on top of
net/http
package. - Context-aware hierarchical middleware layer supporting all the HTTP life cycle.
- Built-in multiplexer for easy composition capabilities.
- Easy to extend via plugins/middleware.
- Ability to easily intercept and modify HTTP traffic on-the-fly.
- Convenient helpers and abstractions over Go's HTTP primitives.
- URL template path params.
- Built-in JSON, XML and multipart bodies serialization and parsing.
- Easy to test via HTTP mocking
- Supports data passing across plugins/middleware via its built-in context.
- Fits good while building domain-specific HTTP API clients.
- Easy to hack.
- Dependency free.
مفهوم GraphQL
گرافکیوال یک query language برای API هست. تو سال ۲۰۱۲ توسط فیسبوک ایجاد شد و درسال ۲۰۱۵ به صورت اپن سورس منتشر شد. این نه یک استاندارده نه یک وب سرویس. گرافکیوال واسط بین کوئری و دیتاسورسهای شماست. دیتاسورس شما میتونه دیتابیس یا وب سرویس باشه.
برای اطلاعات بیشتر این مقاله رو بخونید رست VS گرافکیوال
۴-۴. کتابخانه gqlgen
یکی از بهترین کتابخوانه های گولنگ می باشد برای کار با گراف کیوال ها<br/>۴-۵. کتابخانه graphql-go
یکی دیگر از کتابخوانه های گولنگ می باشد برای کار با گراف کیوال ها
ویژگی های این کتابخانه:
- minimal API
- support for
context.Context
- support for the
OpenTracing
standard - schema type-checking against resolvers
- resolvers are matched to the schema based on method sets
- handles panics in resolvers
- parallel execution of resolvers
- subscriptions
یکسری مثال با نحوه کار این ابزار روی گراف کیوال ها
tonyghita/graphql-go-example - A more "productionized" version of the Star Wars API example given in this repository.
deltaskelta/graphql-go-pets-example - graphql-go resolving against a sqlite database.
OscarYuen/go-graphql-starter - A starter application integrated with dataloader, psql and basic authentication.
zaydek/graphql-go-walkthrough - A beginner friendly walkthrough for prospective developers.
۵. یکسری مفاهیمی که باید بدونید توی کد نویسی یعنی رعایت بشه
۵-۱. کتابخانه Validator
کتابخانه ای برای اعتبار سنجی مقادیر فیلد ها و استراکچرها
ویژگی های این کتابخانه:
- Cross Field and Cross Struct validations by using validation tags or custom validators.
- Slice, Array and Map diving, which allows any or all levels of a multidimensional field to be validated.
- Ability to dive into both map keys and values for validation
- Handles type interface by determining it's underlying type prior to validation.
- Handles custom field types such as sql driver Valuer see Valuer
- Alias validation tags, which allows for mapping of several validations to a single tag for easier defining of validations on structs
- Extraction of custom defined Field Name e.g. can specify to extract the JSON name while validating and have it available in the resulting FieldError
- Customizable i18n aware error messages.
- Default validator for the gin web framework;
۵-۲. کتابخانه GJson
این یک راه سریع و ساده برای به دست آوردن مقادیر از یک سند json را فراهم می کند. دارای ویژگی هایی مانند بازیابی یک خط ، مسیرهای نشانه گذاری نقطه ، تکرار و تجزیه خطوط json است.
۵-۳. کتابخانه Authboss
این بسته یک سیستم تأیید اعتبار ماژولار برای وب است.
این بسته چندین ماژول دارد که ویژگی های تأیید اعتبار و مجوز را دارد که به طور کلی برای وب سایت ها معمول است به گونه ای که شما می توانید هر تعداد مورد نیاز خود را فعال کنید و سایرین را کنار بگذارید. این کار باعث می شود تا بتوانید احراز هویت را به یک برنامه وصل کنید.
۵-۴. کتابخانه Go-Underscore
کتابخانه Underscore.js یکی از کتابخانه های کاربردی JavaScript می باشد که بدون نیاز به توسعه Object های جاوااسکریپت و با استفاده از توابع موجود در آن می توان کدنویسی را بسیار ساده و با سرعت و Performance بهتری انجام داد. در واقع در گولنگ هم ما چنین کتابخانه Go-Underscore داریم.
مطلبی دیگر از این انتشارات
کتابخانه های استاندارد در Go (بخش اول)
مطلبی دیگر از این انتشارات
Go Developer Roadmap part 3
مطلبی دیگر از این انتشارات
الگوهای طراحی در زبان گو (Design patterns in go)-مقدمه