همه چیز درباره زبان برنامه نویسی گوگل Golang

زبان Go برای چه چیزی خوب است؟ مزیت های زبان go , معایب زبان go و همه چیز درباره زبان golang را در این مقاله توضیح داده ایم.

مقدمه

در طی 9 سال و اندی اخیر – زبان برنامه نویسی گوگل Go یا همان زبان golang با شماره نسخه 1.13 که در سپتامبر 2019 منتشر شد از یک زبان مبتدیانه فقط برای بازیگوشی افراد خوره برنامه نویسی تبدیل به یکی از غول های زبان های برنامه نویسی برای پروژه های ابر محور شده است.

چرا Go توسط توسعه دهندگان پروژه هایی مانند Docker و Kubernetes انتخاب شده است ؟ ویژگی های مشخصه زبان golang چیست .چه تفاوتی با سایر زبان های برنامه نویسی دارد و مناسب ترین انتخاب برای ساخت چه نوع پروژه هایی است؟ در این مقاله ، ما به مجموعه ویژگی های زبان golang ، بهترین موارد استفاده ، موارد و محدودیت های زبان و اینکه زبان Go از اینجا به کجا خواهد رسید، خواهیم پرداخت

زبان Go کوچک و ساده است

Go که معمولاً Golang نامیده می شود ، توسط کارکنان Google ساخته شده است . به طور عمده توسط استاد گرافیک یونیکس و مهندس برجسته گوگل ، Rob Pike – اما این دقیقاً “یک پروژه Google” نیست. در عوض ، زبان golang به عنوان یک پروژه منبع باز به همت و کمک افراد علاقه مند توسعه یافته است و رهبری آن نظرات مشخصی در مورد نحوه استفاده از Go و جهت گیری زبان برای استفاده در جاهای مشخص دارد.

Go زبانی است که قرار بوده تا یادگیری آن آسان باشد ، کار با آن سر راست و قابل خواندن توسط سایر توسعه دهندگان باشد. Go مجموعه ای از ویژگی های بزرگ ندارد ، خصوصاً وقتی با زبانهایی مانند ++C مقایسه شود. Go به نحوی خود یادآور C است و یادگیری آن برای توسعه دهندگان قدیمی C تقریباً آسان است. با این اوصاف ، بسیاری از ویژگی های Go ، به ویژه ویژگی های همزمان و برنامه نویسی عملکردی آن ، به زبان هایی مانند Erlang برمی گردد.

زبان golang به عنوان یک زبان مشابه زبان C برای ساخت و نگهداری انواع برنامه های سازمانی کراس پلت فرم ، اشتراکات زیادی با جاوا دارد . و به عنوان ابزاری برای امکان توسعه سریع کدی که قرار است در هر کجا اجرا شود ، می توانید یک خط موازی بین Go و Python قرار دهید . اگرچه تفاوت ها بسیار بیشتر از شباهت ها است.

همه چیز درباره زبان برنامه نویسی گوگل Golang
همه چیز درباره زبان برنامه نویسی گوگل Golang


دلایل محبوبیت زبان Go

مستندات زبان golang در توصیف این زبان می آورد که: “.زبانی سریع ، تایپ شده به شکل استاتیک و کمپایل شده است که حس یک زبان داینامیک به شکل Interpreted را می دهد.” حتی یک برنامه بزرگ Go در عرض چند ثانیه کامپایل می شود. بعلاوه ، Go ازبارگذاری بسیاری از موارد اضافه شده به سبک زبان C شامل پرونده ها و کتابخانه ها جلوگیری می کند.

Go به چندین روش کار برنامه نویس را آسان می کند:

راحتی

Go از لحاظ توانایی تأمین بسیاری از نیازهای رایج برنامه نویسی با زبان های برنامه نویسی مانند Python مقایسه شده است. برخی از این قابلیت ها در خود زبان تعبیه شده است . مانند .”goroutines”. برای همزبانی و رفتار موضوعی ، در حالی که قابلیت های اضافی بسیاری نیز در بسته های استاندارد کتابخانه Go مانند بسته http وجود دارد. مانند پایتون ، Go قابلیت مدیریت خودکار حافظه از جمله جمع آوری زباله را نیز فراهم می کند.

برخلاف زبان های برنامه نویسی مانند پایتون ، کد Go در یک باینری بومی که با سرعت بالایی اجرا می شود ، کامپایل می شود. و برخلاف C یا ++C زبان Go بسیار سریع کامپایل می کند . آنقدر سریع که کار با Go را بیشتر شبیه کار با یک زبان Script می کند تا یک زبان کامپایل شده . بعلاوه ، سیستم ساخت Go پیچیدگی کمتری نسبت به سایر زبانهای کامپایل شده دارد. برای ساخت و اجرای یک پروژه Go چند مرحله کوتاه و حسابداری کم کافی است تا برنامه را بنویسید.

سرعت

باینری های Go کندتر از نمونه زبان C عمل می کنند . اما تفاوت سرعت در اکثر برنامه ها بسیار ناچیز است. عملکرد Go برای اکثر قریب به اتفاق کارها به اندازه C خوب است و به طور کلی بسیار سریعتر از زبان های دیگر است .همان هایی که به سرعت توسعه معروف هستند. (به عنوان مثال JavaScript ، Python و Ruby).

قابل حمل بودن

فایل های اجرایی ایجاد شده با ابزار Go(toolchain) می توانند به تنهایی و بدون هیچ گونه وابستگی خارجی اجرا شوند. toolchain Go برای طیف گسترده ای از سیستم عامل ها و سیستم های سخت افزاری در دسترس است .و می تواند برای کمپایل باینری ها در سیستم عامل ها مورد استفاده قرار گیرد.

قابلیت همکاری

Go همه موارد بالا را بدون آسیب رساندن به دسترسی به سیستم اساسی ارائه می دهد. برنامه های Go می توانند با کتابخانه های C خارجی تعامل کنند یا با سیستم بومی ارتباط بگیرند. به عنوان مثال ، در Docker ،زبان Go با عملکردهای سطح پایین لینوکس ، cgroups و Namespaces تعامل می کند تا جایی که کار به جادوی کانتینرها می رسد.

پشتیبانی

toolchain Go به صورت باینری لینوکس ، MacOS یا ویندوز یا به عنوان یک کانتینر داکر به صورت رایگان در دسترس است. زبان golang به طور پیش فرض در بسیاری از توزیع های محبوب لینوکس ، مانند Red Hat Enterprise Linux و Fedora گنجانده شده است . که استقرار Go را در آن سیستم عامل ها تا حدودی آسان تر می کند. پشتیبانی از Go در بسیاری از محیط های توسعه کد شخص ثالث ، از Microsoft Visual Studio Code گرفته تا ActiveState’s Komodo IDE نیز قوی است.

go از لحاظ سرعت زبانی بسیار کار آمد است
go از لحاظ سرعت زبانی بسیار کار آمد است


زبان Go کجا بهترین کارایی را دارد؟

هیچ زبانی برای هر کاری مناسب نیست ، اما بعضی از زبانها بیشتر از بقیه برای انجام کار ها مناسب هستند.

زبان golang برای ایجاد انواع برنامه های زیر بهترین نوع خود است است پس با هم به گوشه ای از مزیت های زبان go نگاه می کنیم:

خدمات توزیع شبکه

برنامه های شبکه با زمان زندگی می کنند و می میرند . ویژگی های همزمانی بومی Go . -عمدتا goroutines و کانال ها . برای چنین کاری مناسب هستند. در نتیجه ، بسیاری از پروژه های Go برای شبکه سازی ، توابع توزیع شده و سرویس های ابری مناسب هستند: API ها ، وب سرورها ، minimal framework ها برای برنامه های وب و موارد مشابه.این ها فقط گوشه ای از مزیت های زبان go می باشند.

توسعه بومی ابر

ویژگی های همزمانی و شبکه Go و قابلیت حمل بالای آن ، آن را برای ساخت برنامه های بومی ابر مناسب می کند. در حقیقت ، از Go برای ساختن چندین زیر بنای محاسبات ابری از جمله Docker ، Kubernetes و Istio استفاده شده . این از بزرگترین مزیت های زبان go است.

جایگزینی برای زیرساخت های موجود

یکی دیگر از مزیت های زبان go این است که بسیاری از نرم افزارهایی که ما برای زیرساخت های اینترنت به آنها وابسته هستیم. در حال پیر شدن هستند و حفره های امنیتی زیادی در آن ها پیدا می شود . بازنویسی چنین مواردی در Go مزایای بسیاری را به همراه دارد . ایمنی بهتر حافظه ، استقرار آسانتر کراس پلتفرم و پایگاه کد تمیز برای ارتقا در آینده. یک سرور جدید SSH به نام Teleport و نسخه جدیدی ازNetwork Time Protocol در Go در حال نوشتن هستند .که به عنوان جایگزین همتایان قدیمی خود ارائه می شوند.

تسهیلات و ابزارهای مستقل

از دیگر مزیت های زبان go میتوان به این اشاره کرد که برنامه های Go با حداقل وابستگی های خارجی به باینری کامپایل می شوند. این باعث می شود که آنها برای ایجاد برنامه های کمکی و ابزارهای دیگر ایده آل باشند ، زیرا به سرعت راه اندازی می شوند و می توانند به راحتی برای توزیع مجدد بسته بندی شوند.

زبان golangزبان go زبانی ایده آل برای سرویس های ابری است.
زبان golangزبان go زبانی ایده آل برای سرویس های ابری است.


محدودیت های زبان Go

مجموعه ویژگیهای زبان golang هم باعث ستایش و هم انتقاد از آن شده است. Go به گونه ای طراحی شده است که در کنار کوچک بودن و فهم آسان ، با ویژگی های خاصی که عمداً حذف شده اند ، عرضه می شود. نتیجه این است که برخی از ویژگی های معمول در زبان های دیگر به سادگی در Go در دسترس نیستند. باهم به برخی از معایب زبان go نگاه می کنیم:

عدم وجود generics

یکی از این ویژگی ها generics است که به یک تابع اجازه می دهد انواع مختلفی از متغیرها را بپذیرد. زبان golang شامل generics نیست و سکان داران این زبان مخالف اضافه کردن آن هستند . بر این منطق که generics سادگی زبان را به خطر می اندازد. ممکن است با این محدودیت کنار بیایید . اما بسیاری از توسعه دهندگان هنوز تشنه آن هستند تا generics به شکلی به این زبان اضافه شود. یک پیشنهاد برای پیاده سازی generics عمومی در Go مطرح شده است ، اما هنوز هیچ چیز قطعی نیست. در حال حاضر این یکی از بزرگترین معایب زبان go می باشد.

اندازه باینری ها

از دیگر معایب زبان go، اندازه باینری های تولید شده است. باینریهای Go بصورت پیش فرض بصورت استاتیک کامپایل می شوند . بدین معنی که همه موارد مورد نیاز در زمان اجرا در ایمیج باینری وجود دارد. این روش روند ساخت و استقرار را ساده می کند . اما به این هزینه که یک ‘Hello World’ در حدود 1.5 مگابایت در ویندوز 64 بیتی وزن دارد. تیم Go تلاش کرده است تا با هر نسخه منتشر شده از اندازه باینری ها بکاهد . همچنین می توان باینری های Go را با فشرده سازی یا با حذف قسمت (debug) اشکال زدایی Go کوچک کرد . این گزینه آخر ممکن است برای برنامه های توزیع شده مستقل بهتر از سرویس های ابری یا شبکه باشد . زیرا در صورتی که مشکلی روی سرویس پیش بیاید ، داشتن اطلاعات debug مفید است

مدیریت خودکار حافظه

یکی دیگر از مزیت های Go ، مدیریت خودکار حافظه ، می تواند به عنوان یکی از معایب زبان go نیز تلقی شود . زیرا جمع آوری زباله به مقدار مشخصی از پردازش منابع نیاز دارد. Go مدیریت حافظه را به شکل دستی ارائه نمی دهد. جمع آوری زباله ها در زبان golang به دلیل عدم کارکرد مناسب با انواع بارهای حافظه که در برنامه های سازمانی ظاهر می شود ، مورد انتقاد قرار گرفته است. از طرف مثبت . Go 1.8 پیشرفت های زیادی در مدیریت حافظه و جمع آوری زباله ایجادکرده که باعث کاهش چشمگیر lag نیز شده. البته ، توسعه دهندگان Go توانایی استفاده از تخصیص حافظه به طور دستی با افزونه C یا از طریق کتابخانه مدیریت حافظه دستی شخص ثالث را دارند .

این فرهنگ که نرم افزار باید حول ایجاد GUI غنی برای برنامه ها باشد. به مانند آنچه در برنامه های دسک تاپ می بینیم ،در زبان Go هنوز بسیار خام است. و این یکی دیگر از معایب زبان go می باشد.

رابط کاربری

بیشتر برنامه های Go ابزارهای خط فرمان یا خدمات شبکه هستند. همانطور که گفته شد ، پروژه های مختلفی برای ایجاد GUI غنی برای برنامه های Go در حال تلاشند. اتصالات برای framework های GTK و GTK3 وجود دارند. پروژه دیگری نیز برای ارائه UI های بومی پلت فرم در نظر گرفته شده است ، اگرچه اینها به زبان C متکی هستند و به صورت خالص در Go نوشته نشده اند. کاربران ویندوز می توانند walk را امتحان کنند . اما هنوز هیچ برنده مشخص مطمئنی در این فضا ظاهر نشده است . برخی از پروژه ها ، مانند تلاش گوگل برای ساخت کتابخانه GUI بین پلتفرم ، نیز به بی راهه رفته است. همچنین ، از آنجا که Go از نظر طراحی مستقل از پلتفرم است. بعید است که هیچ کدام از اینها به بخشی از پکیج استاندارد زبان تبدیل شوند. می توان این را یکی از معایب زبان go دانست.

اگرچه Go می تواند با فانکشن های بومی سیستم صحبت کند ، اما برای ایجاد اجزای سطح پایین سیستم مانند هسته ها یا درایورهای دستگاه یا سیستم های جاسازی شده طراحی نشده است. به هر حال ، runtime Go و جمع آوری زباله برای برنامه های Go به سیستم عامل اصلی بستگی دارد. (توسعه دهندگان علاقه مند به یک زبان پیشرفته برای این نوع کارها ممکن است به زبان Rust نگاه کنند .)

?مزایاومعایبزبانgo
مزایا و معایب زبان go
مزایا و معایب زبان go


آینده زبان Go

فاز بعدی در توسعه Go ممکن است بیشتر تحت تأثیر خواسته ها و نیازهای توسعه دهندگان آن باشد . با توجه به اینکه رهبران این پروژه بیشتر بر کارآمدی این زبان برای مخاطبینش در تلاشند تا پیش گرفتن یک روش لجوجانه و به دور از انتقادپذیری. به عبارت دیگر ، زبان golang ممکن است ویژگیهایی را بدست آورد که در ابتدا برای آن در نظر گرفته نشده است . مانند generics.

واضح است که توسعه دهندگان Golang این موارد را می خواهند. .طبق نظرسنجی سال 2018 .زبان go گذاشتن generics در میان سه در خواست اصلی کاربران به همراه موارد دیگر برای تطبیق پدیری بیشتر این زبان در بین عموم مردم بود. همچنین با dependencies و مدیریت بسته بهتر. و یک پیشنهاد در GitHub برای generics به عنوان پیشنهادی برای قرار دادن در Go 2.x همچنان فعال است.

تغییراتی از این دست ممکن است به Go کمک کند تا در توسعه ، جایی که در حال حاضر JavaScript و Python پادشاهان هستند ، جایگاه والاتری پیدا کند .حتی بدون تغییرات عمده ، می توان انتظار داشت که استفاده از Go برای پروژه های بازسازی زیرساخت افزایش یابد . همانطور که در مورد SSH و NTP در بالاتر توضیح دادیم.

پیاده سازی های شخص ثالث از toolchain Go نیز گسترش یافته است. ActiveGo از ActiveState نسخه تجاری پشتیبانی شده زبان Go را فراهم می کند. و هر دو پروژه LLVM و gccgo ابزار منبع باز با مجوز Go را به عنوان جایگزین هایی برای toolchain خود زبان go ارایه می دهند.

کلام آخر

در نهایت ، Go همچنین به عنوان پایه ای برای توسعه زبانهای کاملاً جدید عمل کرده است . اگرچه دو نمونه از این توسعه های فعال متوقف شده است. یک مثال زبان Have بود ، که نحوه زبان golang را ساده تر می کرد . برخی از مفاهیم مشابه را به روش خاص خود پیاده سازی می کرد و برای اجرای آسانتر آنها را به Go انتقال می داد. یک پروژه ملغی شده دیگر . Oden. از اسمبلر و toolchain زبان Go برای تدوین یک زبان تازه طراحی شده استفاده کرد که از زبانهایی مانند Lisp و Haskell الهام می گرفت.

این مجموعه از آخرین پروژه ها یکی از راه های انقلاب واقعی هر نوآوری در فناوری اطلاعات را نشان می دهد . هنگامی که افراد آن را از پایه جدا می کنند و برای اهداف دیگر دوباره سر هم می کنند .به شکلی که طراحان آن زبان هیچ گاه چنین ایده و قصدی را در نظر نداشتند. آینده زبان Go به عنوان یک پروژه قابل هک شدن تازه شروع شده است. اما آینده آن به عنوان یک زبان اصلی برنامه نویسی به خصوص در فضای ابری کاملا اثبات شده است .جایی که سرعت و سادگی Go زمان توسعه زیرساخت های مقیاس پذیر را که می تواند در بلند مدت حفظ شود ،به شدت کاهش می دهد.