۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

زبان Go واقعا برای چه چیزی خوب است؟

Go که به دلیل همزمانی آسان مشهور است، به زبان پروژه‌های ابری بی‌شماری تبدیل شده است. در اینجا همه چیزهایی است که باید در مورد زبان برنامه نویسی موفق گوگل بدانید.

Go که به دلیل همزمانی آسان مشهور است، به زبان پروژه‌های ابری بی‌شماری تبدیل شده است. در اینجا همه چیزهایی است که باید در مورد زبان برنامه نویسی موفق گوگل بدانید.

در طول بیش از ده سال فعالیت خود در طبیعت، زبان برنامه نویسی Go Google از یک کنجکاوی برای گیک های آلفا به زبان برنامه نویسی آزمایش شده در نبرد در پشت برخی از مهم ترین جهان تبدیل شده است. پروژه های نرم افزاری >ابر بومی.

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

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

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

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

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

مستندات Go Go را به‌عنوان یک زبان کامپایل‌شده، سریع، تایپ‌شده و ایستا توصیف می‌کند که شبیه به تایپ پویا است. ، زبان تفسیر شده است.» حتی یک برنامه Go بزرگ در عرض چند ثانیه کامپایل می شود. بعلاوه، Go از بسیاری از سربارهای سبک C شامل فایل‌ها و کتابخانه‌ها جلوگیری می‌کند.

مزایای زبان برو

  • رفتن راحت است
  • رفتن سریع است
  • Go قابل حمل است
  • Go قابلیت همکاری دارد
  • Go به طور گسترده پشتیبانی می شود

Go زندگی برنامه‌نویس را از طرق مختلف آسان می‌کند.

رفتن راحت است

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

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

5 تکنولوژی ضروری برای شرکت های امروزی

رفتن سریع است

باینری های Go کندتر از همتایان C خود اجرا می شوند، اما تفاوت در سرعت برای اکثر برنامه ها ناچیز است. عملکرد Go به اندازه C برای اکثریت قریب به اتفاق کارها خوب است و عموماً بسیار سریعتر از سایر زبان‌های معروف به سرعت توسعه است (به عنوان مثال، جاوا اسکریپت، پایتون و روبی) .

Go قابل حمل است

فایل های اجرایی ایجاد شده با زنجیره ابزار Go می توانند به تنهایی و بدون وابستگی خارجی پیش فرض باشند. زنجیره ابزار Go برای طیف گسترده ای از سیستم عامل ها و پلتفرم های سخت افزاری موجود است و می توان از آن برای کامپایل باینری ها در سراسر پلتفرم ها استفاده کرد.

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

Go همه موارد فوق را بدون از بین بردن دسترسی به سیستم اصلی ارائه می دهد. برنامه های Go می توانند با کتابخانه های C خارجی صحبت کنند یا تماس های سیستمی بومی برقرار کنند. به عنوان مثال، در Docker، Go با توابع سطح پایین لینوکس، cgroup ها و فضاهای نام تعامل دارد تا جادوی کانتینر را انجام دهد.

Go به طور گسترده پشتیبانی می شود

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

قوی است.

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

  • توسعه بومی ابر
  • خدمات شبکه توزیع شده
  • ابزارها و ابزارهای مستقل

هیچ زبانی برای هر شغلی مناسب نیست، اما برخی از زبان ها برای مشاغل بیشتری نسبت به سایرین مناسب هستند. Go برای توسعه انواع برنامه های زیر درخشان ترین می درخشد.

توسعه بومی Cloud

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

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

برنامه‌های شبکه به‌صورت همزمان زنده می‌شوند و از بین می‌روند، و ویژگی‌های همزمانی بومی Go – عمدتاً گوروتین‌ها و کانال‌ها برای چنین کارهایی مناسب هستند. در نتیجه، بسیاری از پروژه‌های Go برای شبکه‌سازی، توابع توزیع‌شده و خدمات ابری هستند: APIها، سرورهای وب، فریم ورک های حداقل برای برنامه های وب و موارد مشابه.

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

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

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

  • Go بسیاری از ویژگی های زبان را حذف می کند
  • باینری های Go می توانند بزرگ باشند
  • بروید جمع آوری زباله منابع را می بلعد
  • Go فاقد یک جعبه ابزار استاندارد برای ساخت رابط کاربری گرافیکی است

چرا باید از داکر و کانتینرها استفاده کنید؟

Go فاقد یک جعبه ابزار استاندارد برای ساخت رابط کاربری گرافیکی است

Go بسیاری از ویژگی های زبان را حذف می کند

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

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

باینری های Go می توانند بزرگ باشند

یکی دیگر از نقاط ضعف احتمالی Go اندازه باینری های تولید شده است. باینری های Go به طور پیش فرض به صورت ایستا کامپایل می شوند، به این معنی که هر چیزی که در زمان اجرا مورد نیاز است در تصویر باینری گنجانده شده است. این رویکرد فرآیند ساخت و استقرار را ساده می کند، اما به قیمت یک “سلام، دنیا!” در ویندوز ۶۴ بیتی حدود ۱.۵ مگابایت وزن دارد. تیم Go با هر نسخه متوالی برای کاهش اندازه آن باینری ها کار می کند. . همچنین ممکن است باینری های Go را با فشرده سازی کوچک کنید.  یا با حذف اطلاعات اشکال زدایی Go. این آخرین گزینه ممکن است برای برنامه‌های توزیع‌شده مستقل بهتر از سرویس‌های ابری یا شبکه کار کند، جایی که در صورت خرابی سرویس، داشتن اطلاعات اشکال‌زدایی مفید است.

بروید مجموعه زباله منابع را می بلعد

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

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

Go فاقد یک جعبه ابزار استاندارد رابط کاربری گرافیکی است

فرهنگ نرم‌افزاری پیرامون ایجاد رابط‌های کاربری گرافیکی غنی برای برنامه‌های Go، مانند برنامه‌های دسکتاپ، هنوز پراکنده است.

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

به روز رسانی GitHub Actions امنیت را تشدید می کند

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

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

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

۲۰۲۱ Go Developer Survey دریافت شد کاربران Go در کل از آنچه این زبان ارائه می‌دهد راضی بودند ، اما همچنین به فضای زیادی برای بهبود اشاره کرد. حوزه‌های برتری که کاربران Go در آن‌ها خواهان بهبود بودند، مدیریت وابستگی (یک چالش همیشگی در Go)، تشخیص اشکالات، و قابلیت اطمینان، با مشکلاتی مانند حافظه، استفاده از CPU، اندازه‌های باینری و زمان ساخت بسیار پایین‌تر بود.

بیشتر زبانها به یک مجموعه اصلی از موارد استفاده گرایش پیدا می کنند. در دهه‌ای که Go وجود دارد، جایگاه آن به خدمات شبکه تبدیل شده است، جایی که احتمالاً به گسترش دامنه خود ادامه خواهد داد. به طور کلی، مورد استفاده اصلی ذکر شده برای این زبان، ایجاد API یا خدمات RPC (49%)، و پس از آن پردازش داده (۱۰%)، خدمات وب (۱۰%)، و برنامه های کاربردی CLI (8%) بود.

یکی دیگر از نشانه های جذابیت رو به رشد Go language این است که بسیاری از توسعه دهندگان پس از ارزیابی آن را انتخاب می کنند. ۷۵ درصد از افرادی که در نظرسنجی شرکت کردند و در نظر داشتند از Go برای یک پروژه استفاده کنند، زبان را انتخاب کردند. از بین کسانی که Go را انتخاب نکردند، Rust (25%)، Python (17%) و Java (12%) بهترین گزینه‌ها بودند. هر یک از این زبان ها جایگاه های دیگری را پیدا کرده یا در حال یافتن هستند: Rust برای برنامه نویسی سیستم های ایمن و سریع. پایتون برای نمونه سازی، اتوماسیون، و کد چسب؛ و جاوا برای برنامه های قدیمی سازمانی.

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