نسخهٔ 1.8 از زبان برنامهنویسی Go قرار است با ویژگیهای جدیدی منتشر شود که از آن جمله میتوان به HTTP/2 Push ،HTTP Server Graceful Shutdown ،Plugins و Default GOPATH اشاره کرد؛ میزان تاثیر این ویژگیها بستگی به نحوهٔ استفاده از Go دارد. از زمان انتشار Go 1.0 در سال 2012، عواملی مانند تاکید بر سادگی، اجرای همزمان و پشتیبانی داخلی باعث شده که نمودار محبوبیت آن رو به افزایش باشد و به همین دلیل است که کاربردها و فواید این زبان برنامهنویسی ساخت گوگل روزبهروز بیشتر و بیشتر میشود. در این مقاله به چند ویژگی جالب در نسخۀ جدید Go و به طور کلی در دنیای Go اشاره میکنیم. این لیست، قطعا کامل نیست؛ پس حتما نظرات خود را دربارۀ ویژگیهای مهم Go در سال 2017 با ما به اشتراک بگذارید.
قابلیت اجرایی بالای Go به همراه پلاگین
نسخه 1.8 زبان Go برای بسیاری از برنامهنویسها این سوال را ایجاد کرده که اضافه کردن پلاگین (مجموعههای کد که به صورت پیشفرض در برنامه تعریف نشدهاند) چه تاثیری روی Container (کانتینر) خواهد داشت. پلاگینهای پویا، استفاده از میکروسرویسها با توانایی بالای اجرای همزمان را ساده میکند. با حفظ تمام مزایای میکروسرویسهای کانتینر، میتوانید پلاگینها را مثل یک پراسس خارجی اجرا کنید؛ یعنی جلوگیری از کرش برنامۀ اصلی و نداشتن برنامۀ مزاحم در فضای حافظه. Dynamic Pluginهای واقعا یک مزیت عالی برای استفاده از کانتینر در Go به شمار میرود.
زبانی برای همۀ پلتفرمها که باعث جذب دولوپر میشود
در این مدت 7 سال که Go اپنسورس شده، در بخشهای مختلف دنیای توسعهٔ نرمافزار از آن استفاده شده است. یک دانشمند و مهندس داده به نام Daniel Whitenack که مالک کرنل Go برای Jupyter میباشد، گفته که اخیرا دوره آموزشی علم داده و Go در سیبری برگزار کرده (بله، سیبری! و باز هم بله، علم داده و Go! در ادامه بیشتر توضیح میدهیم) و اظهار داشته که «از شور و هیجان جامعهٔ Go در سیبری متحیر شدم.» دلیل مهم دیگری که برنامهنویسها از Go برای پروژههای خود استفاده میکنند، کراسپلتفرم بودن این زبان برنامهنویسی است که این قابلیت از نسخه 1.5 به بعد، آسانتر هم شده است. برای برنامهنویسانی که با زبانهای دیگر مانند Python کار میکنند، قابلیت ساخت یک اپلیکیشن جامع و آماده برای چند سیستمعامل بدون استفاده از محیط VM (ماشین مجازی)، یک مزیت کلیدی برای کار با Go به شمار میرود (کافی است این ساپورت کراسپلتفرم را با افزایش 15 درصدی سرعت کمپایل در نسخهٔ 1.8 ترکیب کنید تا متوجه محبوبیت زیاد Go برای پیادهسازی ایدههای استارتاپی با این زبان بشوید.)
مفسر برای Go در دست ساخت است؛ بدرود Real-Eval-Print-Loop!
برنامهنویسان بسیار خلاق و باهوشی روی Interpreter (اینترپرتر یا مفسر) برای Go کار میکنند، و حتما چشم بهراه نتیجۀ کار خواهیم بود؛ همه خیلی خوب میدانند که چندین راهکار Real-Eval-Print-Loop وجود دارد که میتوانند کد را ارزیابی کنند که مطابق انتظار عمل میکند یا خیر، اما برای استفاده از این روشها باید چندین اخطار آزاردهنده را تحمل کنید یا با چند روش، کلی کار کنید تا روش مناسب کار خودتان را پیدا کنید. عالی میشد اگر یک اینترپرتر قوی و منسجم ساخته میشد که البته در آیندهای نهچندان دور، داشتن مفسر برای زبان گو دیگر یک آرزو نخواهد بود بلکه یک واقعیت است!
Go سرورلس چهشکلی خواهد بود؟
اخیرا بحث معماری سرورلس (بدون سرور) خیلی جنجالی شده، که به آن function As A Aervice یا به اختصار FaaS هم میگویند. اما به قول قدیمیها، تا نباشد چیزکی مردم نگویند چیزها! واقعا جریان سرورلس در Go چیست؟ آیا میتوانیم امسال شاهد خدمات سرورلس با نیتیو ساپورت برای Go باشیم؟ (برای آشنایی بیشتر با این نوع معماری جدید، به مقالهٔ آشنایی با معماری Serverless در کلود مراجعه نمایید.)
شرکت AWS Lambda که از زیرشاخههای آمازون میباشد، سرشناسترین ارائهدهندۀ خدمات سرورلس میباشد، اما گوگل هم اخیرا Google Cloud Functions را راهاندازی کرده است که بهعنوان رقیبی جدید برای آمازون محسوب میشود. این سرویسها، هر دو این امکان را فراهم میکنند تا کد را بدون مدیریت سرور اجرا کنید؛ یعنی کد در کلاستریای از سرورها ذخیره میشود و فقط زمانی اجرا میشود که یک Event (ایونت یا رویداد) کد را فراخوان کند.
در حال حاضر، AWS Lambda زبانهای JavaScript ،Python و Java را ساپورت میکند، و میتوانید پراسسهای bash ،Ruby و Go را هم اجرا کنید. Google Cloud Functions فقط زبان JavaScript را ساپورت میکند، اما احتمالا به زودی Python و Java هم ساپورت خواهند شد. بسیاری از دیوایسهای مرتبط با IoT (اینترنت اشیاء)، از معماری سرورلس استفاده میکنند و با رشد استقبال استارتاپها از زبان برنامهنویسی گو، ظاهرا خدمات سرورلس جای رشد زیادی در آینده خواهد داشت؛ پس باید دید Go برای ساپورت این راهکارهای سرورلس، چه تغییراتی میکند. در حال حاضر چندین فریمورک برای ساپورت Go در AWS Lambda در دست ساخت است که عبارتند از:
- λ Gordon: با استفاده از CloudFormation میتوانید AWS Lambda بسازید، پیکربندی کنید، و اجرا کنید.
- Apex: فانکشنهای AWS Lambda بیلد، اجرا و مدیریت کنید.
- Sparta: فریمورک Go برای میکروسرویسهای AWS Lambda
همچنین یک جایگزین برای AWS Lambda ساخته شده که از Go ساپورت میکند که عبارت است از Iron.io؛ این پلتفرم روی Docker و Go ساخته شده، سازگار با هر زبانی است به طوری که زبانهای Golang ،Python ،Ruby ،PHP و NET. را ساپورت میکند (برای آشنایی بیشتر با زبان برنامهنویسی پایتون، به دورهٔ آموزش رایگان زبان Python در سکان آکادمی مراجعه نمایید.)
Go و علم داده (Data Science)
در ابتدای مقاله اشاره کردیم که با کمال تعجب، خیلیها از Go برای علم داده و یادگیری ماشینی استفاده میکنند؛ هنوز مناسب بودن آن مورد بحث و جنجال است، اما شواهدی مانند پژوهشها و همایشها و آمار بالای استفاده از یادگیری ماشینی و توزیع داده، نشان میدهد که این موضوع واقعی است.
قابلیت اجرای آسان Go که قبلا اشاره کردیم، یکی از دلایل اصلی است که دانشمندان علم داده با زبان گو کار میکنند؛ دانشمندان خیلی راحتتر میتوانند مدلهای دادهٔ خود را در یک اپلیکیشن منظمتر و کارآمدتر نشان بدهند. ترکیب این قابلیت با گسترش کاربرد Go (قبلا اشاره کردیم که نمودار محبوبیت آن رو به افزایش است) به دانشمندان داده کمک میکند تا اپلیکیشنهایی بسازند که با دیگر برنامهها سازگاری بالای دارند. هر اپلیکیشنی که دانشمندان داده با Go بسازند، با بقیۀ اپلیکیشنهای آنها هماهنگ خواهد بود، یا حداقل با معماریهای جدید سازگاری زیادی خواهد داشت.