توی تجربه ی شخصی ای که با یه عده از برنامه نویس ها داشتم، تعصب خیلی زیادی توی بعضی هاشون دیدم. برای مثال دوستی داشتم که اصرار به برتری C++ به پایتون داشت. به خاطر تفاوت سرعتی که دارن. اون موقع تحت تاثیری که از اون شخص گرفته بودم تصمیم گرفتم یه مقدار در مورد تفاوت هاشون سرچ کنم. توی هر زبونی یه سری فیچر خاص میدیدم.
مثلا با استفاده از پایتون و به خاطر ماژول های زیادش با سرعت زیادی میشد پروژه ای رو که می خوایم رو بنویسیم. یا مثلا C که سرعت بالاتری داشت. C++ که میشد برای embedded systems ازش استفاده کرد، C# که علاوه بر سرعت بالا امکانات بیشتری هم میداد به ما. خود منم توی اون بازه تعصب بالایی روی پایتون داشتم. حتی پیش میومد دعوا کنم به خاطرش. ولی خب همه ی ماها یه دورانی داشتیم که بهش افتخار نمیکنیم :)
بعد از این که یه مقدار فیلد کاریم رو گسترش دادم و با زبون های بیشتری کار کردم، فهمیدم که قضیه از چیزی که به نظر میرسه پیچیده تره. هر زبونی کاربرد خاصی داره شاید بشه با یه زبون خیلی کارها کرد ولی خب همونطور که میشه با پایتون اپ اندرویدی نوشت ولی تا الان ندیدم کسی به دنبالش بره قطعا توی هر زبونی هم یه سری امکانات پر رنگ تر هستند که ممکنه متناسب با پروژه، ما تصمیم بگیریم از زبون خاصی استفاده کنیم.
همه ی این ها گذشت و بعد از یک سال فکر کردن به یادگیری Golang بالاخره رفتم سراغش. اولش برام یه ذره عجیب بود. به خاطر تغییراتی که داده بودن. به خاطر سختگیری هاش و.... ولی در نهایت فهمیدم که بالاخره یه زبونی پیدا کردم که باز میتونم روش تعصب داشته باشم. هر چند من هنوزم تفاوت زبون ها و این که برای هر پروژه ای ممکنه یه زبونی کاربرد داشته باشه رو انکار نمیکنم مثلا الان هم شما نمیتونید با go یه اپ اندرویدی بنویسید ولی خب بازم حس میکنم ارزش این که آدم روش تعصب داشته باشه رو داره.
زبان go یه زبان کامپایل شده است که سخت گیری های خاص خودش رو داره. اجبارش توی گذاشتن کامنت برای جاهای خاصی از کد، سرعتش، سادگیش و موارد دیگه ای که توی خودش جا داده باعث تفاوتش بین زبون ها شده. تفاوت هایی که go داره رو اینجا با هم بررسی میکنیم و در واقع به این سوال جواب میدیم که چرا go:
سادگی در یادگیری: البته درسته که این زبون یه مقدار ساختار شکنی کرده، ولی باز هم میشه گفت برای یادگیری ساده است. البته نمیگم به سادگی زبانی مثل پایتون ولی خب به هر حال میشه گفت زبان ساده ای هست.
سرعت: توی بعضی از پروژه ها، سرعت اجرا اهمیت داره و توی بعضی ها سرعت development. اگه دنبال زبانی هستید که بتونه هر دوی این ها رو داشته باشه go میتونه انتخاب خوبی براتون باشه.
همزمانی ساده: یکی از مواردی که گاهی ممکنه توی کد نویسی چالش ایجاد کنه بحث همزمانی هستش. معمولا برای نوشتن کدهایی که قراره به صورت همزمان اجرا بشن، باید یه سری کد اضافه نوشت و یه سری موارد رو رعایت کرد. نمیگم توی go این مشکلات وجود نداره ولی این زبون سعی کرده با امکاناتی که گذاشته این مورد رو خیلی راحت کنه.
نوشتن راحت سرویس ها: اگه با معماری مایکرو سرویسز آشنا باشین، میدونین که گاهی ممکنه مشکلات عجیبی براتون پیش بیاد. مثلا ارتباط بین بعضی سرویس ها توی یه شرایطی کار نکنه. یکی از خوبی های go اینه که سعی کرده با گذاشتن امکاناتی این مورد رو به راحتی هندل کنه.
نوشتن و اجرای راحت در سیستم عامل های مختلف: خیلی راحت میتونین کدهای گو رو بنویسین و به راحتی اجراشون کنین.
مشکلات golang:
پکیج منیجر در گو: یکی از مواردی که از دید من جای کار داره توی گو، نحوه ی هندل کردن پکیج ها در گو هستش. ولی خب تمام نیاز های شما رو حل میکنه
ورک اسپیس: هر چند که ساخت یه workspace اجباری نیست ولی خب بهتره که داشته باشین. یه مقدار ممکنه توی شروع این قضیه شما رو اذیت کنه ولی به مرور زمان این مورد براتون عادی میشه.
سادگی: شاید این به نظرتون عجیب بیاد. اما میشه گفت گو اونقدر ساده ایت که این سادگی گاهی شما رو اذیت میکنه. این ممکنه یه مقدار سلیقه ای باشه البته
شی گرایی: برنامه نویس های go برای این مورد نظر های مختلفی دارن. بعضی ها میگن این زبون شی گراست و بعضی ها میگن نیست. من به شخصه دوست دارم بگم هست چون با استفاده از استراکت ها به ما این امکان رو میده که یه سری بلوپرینت تعریف کنیم و در نهایت هم به اون استراکت ها یه سری از توابعمون رو اختصاص بدیم ولی اگه به دنبال این هستین که مثل java بتونین توی go شی گرایی کار کنین، باید بگم متاسفانه امکانش نیست
به این لیست ها میشه خیلی موارد دیگه رو اضافه کرد اما من وقتی از دیدگاه خودم نگاه میکنم این موارد رو جزو اصلی ترین ها میبینم.
امیدوارم براتون مفید بوده باشه