حدود ۶ ماه پیش از طریق دوستان توییتری با زبان Go آشنا شدم و بعد از آن در اولین فرصت روی یادگیری این زبان عالی و خوش‌دست وقت گذاشتم، الان بعد از دو ماه آشنایی توانستم یه REST API به صورت نمونه (همراه با تکنیک‌های OAuth) به وسیله‌ی این زبان پیاده سازی کنم، از انتخابی که کردم فوق‌العاده خوشحالم 😉

حالا تصمیم گرفتم مطلبی در مورد زبان Go بنویسم، سعی می‌کنم با دانش و اطلاعاتی که در این چند ماه بدست آوردم بگم چرا زبان Go انتخاب خوبی به حساب می‌آید و در صورت قانع شدن چه طوری می‌توانیم با این زبان دوست بشویم!

چرا زبان Go ؟

اول بگیم چه کسانی زبان Go را بوجود آورده اند !

تعدادی آدم خیلی خفن و باهوش از جمله Ken Thompson و یا Rob Pike برای رفع نیازهای خودشان این زبان را بوجود آوردند، در کل چنین هدف‌هایی را دنبال می‌کردند:

  • سریع کامپایل شود !
  • کارایی بالایی داشته باشید.
  • بتوان از توان پردازشی سیستم‌های فعلی ( چند هسته‌ای ) بهره‌ی لازم را برد.
  • مدیریت روندهای همزمان concurrency راحت‌تر شود.
  • با شبکه بیگانه نباشد، بتوان به راحتی از آن برای وب استفاده کرد.
  • سینتکس تمیز و راحتی داشته باشد.
  • به راحتی بتوان فایل کامپایل شده‌اش را روی سیستم‌عامل‌های مختلف اجرا کرد.

خوب تقریباً خصوصیات زبان Go گفته شد 😂 ولی در کل این اهداف اصلی بوجود آمدن این زبان بود، شاید هم چند مورد از قلم افتاده باشه، به هر حال آدم‌های کار درستی مثل Robert Griesemer بیکار نبودند که چنین زبانی را به وجود بیاورند!

کی پشت این زبان هست ؟! متن بازه ؟

چون بیشتر بوجود آورندگان این زبان در شرکت گوگل کار می‌کردند، گوگل پشت این زبان هست و به صورت کاملاً متن باز در دسترس همه قرار داده، پس نباید نگران پشتیبانی و یا مرگ این زبان باشیم!

آیا زبان Go شی‌گراست ؟

این سوال خیلی از کسانی هست که می‌خواهند با این زبان دوست بشوند، در جواب می‌توان گفت هم آره و هم نه، آری از این نظر که شما می‌توانید با استفاده از مفاهیم Types و Method هایی که برای آن در نظر می‌گیرید به گونه‌ای مثل شی‌گرایی عمل کنید، ولی در عمل که وارد این زبان می‌شوید می‌بینید که این زبان شما را محدود به مفاهیم شی‌گرایی مثل کلاس و یا وراثت نکرده است، به عنوان مثال Custom Type ها و مبحث Interface به شما کمک می‌کند به راحتی از لایبری‌های built in خود زبان Go استفاده‌های جالبی داشته باشید، در کل تا ازش استفاده نکنید نمی‌توانید بفهمید که چه قدر می‌توان در عین سادگی flexible عمل کرد!

نحوه‌ی انتشار و به روز رسانی زبان

این زبان در نوامر سال ۲۰۰۹ به صورت عمومی منتشر شده و تا سال ۲۰۱۲ بر روی بهبود و طراحی آن کار شده، بعد از انتشار ورژن ۱ آن دیگه استیبل شده و تغییراتی روی لایبری‌های اصلی آن انجام نگرفته، تقریباً هر شش ماه ورژن جدیدی از آن منتشر می‌شود، پس مثل Node.js این جوری نیست که هفته‌ای یه ورژن منتشر کنه!

زبان کامپیایلی

زبان‌هایی مثل پایتون و یا جاوااسکریپت اصطلاحاً weak typed هستند، چون در هنگام اجرا تفسیر شده و به کد ماشین تبدیل می‌شوند به گونه‌ای هستند که نوع مقادیر می‌تواند به صورت پویا باشد، این موضوع شاید خوب به نظر بیاید ولی بیشتر مواقع دردسر ساز است، در مقابل این نوع شیوه زبان‌هایی مثل ++C و یا جاوا strong typed بوده و یا اصطلاحاً می‌گویند کامپایلی هستند، مشکلات زبان‌های تفسیری را نداشته ولی در عوض زمان کامپایل آنها در پروژه‌های بزرگ به صروت چشم گیری محسوس است، زبان Go در عین static typed بودن، آمده از تکنیک‌هایی استفاده کرده تا این زمان کامپایل حتی در پروژه‌های خیلی بزرگ به چند ثانیه برسد ! و جالب‌تر اینکه وقتی کامپایل شد شما می‌توانید روی سیستم عامل‌های مختلف بدون داشتن نرم‌افزار خاصی اجرایش کنید.

حالا که می‌گی اینقدر خوبه کی ازش استفاده می‌کنه؟

قسمت هیجان انگیز ماجرا این هست که خیلی از شرکت‌های بزرگ دنیا با استفاده از زبان Go سرویس‌ها فوق‌العاده با کیفیت و با کارایی بالا نظیر داکر، یوتیوب، دراپ‌باکس، MongoD‌B توسعه داده‌اند، پس مطمئن باشید از همه لحاظ این زبان امتحان خودش را در Scale های بالا پس داده است، برای مشکلاتش راه‌حل‌های منطقی و خوبی ارائه شده، کامیونیتی فوق‌العاده فعالی داره، و مطمئن باشید در همین ایران هم آینده درخشانی خواهد داشت، کما اینکه همین الان شرکت‌هایی هستند که از این زبان برای توسعه سرویس‌های خودشان استفاده می‌کنند!

برای اطلاعات بیشتر راجع به این زبان می‌توانید سوالات متداول در وب‌سایت خود زبان Go را بخوانید، یکم تخصصی گفته ولی کامل و جامع راجع به زوایای مختلف این زبان نوشته!

👈 در حد سواد و اطلاعاتی که داشتم در مورد این زبان نوشتم، قول می‌دهم به زودی در ادامه‌ی این پست راجع به منابع آموزشی این زبان مطلبی بنویسم 😊!