جستجو برای:
سبد خرید 0
  • صفحه اصلی
  • دوره‌های آموزشی
  • وبلاگ
  • درباره ما
  • قوانین و مقررات
  • همکاری با ما
  • تماس با ما
محتوای باز
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]
  • خانه
  • کتاب آنلاین
  • درباره سایت
  • درباره لوگو
  • تماس با ما
محتوای باز
  • صفحه اصلی
  • دوره‌های آموزشی
  • وبلاگ
  • درباره ما
  • قوانین و مقررات
  • همکاری با ما
  • تماس با ما
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0
[wcas-search-form]

زبان قدرتمندی به نام Go

22 فروردین 1400
ارسال شده توسط فرشید نوتاش حقیقت
برنامه‌نویسی، چیست

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

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

زبانی از طرف برنامه‌نویسان، برای برنامه‌نویسان

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

خلق یونیکس، زبان سی، سیستم Plan9، کدینگ معروف UTF-8، توسعه عبارات باقاعده، مشارکت در طراحی Java HotSpot، مشارکت در طراحی V8 (کروم و Node.js)، یک جایزه تورینگ (معادل نوبل در علوم رایانه‌ای)، یک مدال ملی فناوری ایالات متحده.

شرکت‌هایی مثل گوکل، یوتیوب، توئیتر، دراپ‌باکس، موزیلا، کنونیکال، Bitly، Redhat، CloudFlare وTumblr (این لیست بسیار بلند است…) و ده‌ها سرویس دیگر از Go استفاده کرده‌اند و طبق گفته خودشان، همگی تجربه کاملا مثبتی داشته‌اند. بعضی از آن‌ها Go را در جایی استفاده کردند که فقط سی و سی‌پلاس‌پلاس توان سرویس‌دهی آن قسمت را داشته‌اند، و بعضی دیگر هم Go را به جای زبان‌های سطح بالاتری مانند پی‌اچ‌پی و روبی و پایتون به کار برده‌اند. امکان ندارد بتوانید زبان دیگری جز Go را نام ببرید که در چنین مدت کوتاهی توانسته باشد تا این حد مورد توجه قرار گیرد!

کاهش هزینه‌ها با صرفه‌جویی در منابع

برعکس برنامه‌نویسان تازه‌کار، برنامه‌نویسان با تجربه به خوبی می‌دانند که «سرعت» غالبا آخرین گزینه در انتخاب یک زبان است! زبان Go در نسخه فعلی، جزو سریع ترین زبان‌های برنامه‌نویسی دنیاست و با یک شیب تند به سوی سریع تر شدن در نسخه‌های آتی در حرکت است. اگر از زبانهایی مثل پی‌اچ‌پی و روبی و پایتون استفاده می‌کنید، پس از مهاجرت به Go، می‌توانید انتظار ۲۰ تا ۵۰ برابر شدن سرعت را داشته باشید!

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

سرویس iron.io بعد از سوییچ کردن از روبی به Go، توانست ۳۰ سروری که مسئول میزبانی خدماتش بودند را به تنها ۲ سرور کاهش دهد! در سناریویی جالب‌تر، در گوگل سرویس dl.google.com از سی‌پلا س‌پلاس به Go سوییچ کرد و حاصل کار نصف شدن کدها، سرعت برابر، مصرف حافظه بهینه‌تر! وکاهش زمان لود اولیه سرویس (استارتاپ تایم) از ۱۲ ساعت به چند ثانیه بود!!

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

ساده و آسان

برعکس تصور خیلی‌ها، سادگی و سهولت دو ویژگی کاملا متمایز هستند! زبان‌هایی هستند که ساده‌اند، اما استفاده از آن‌ها آسان نیست (مانند سی)، زبان‌هایی هم هستند که آسانند، اما اصلاً ساده نیستند (مانند جاوااسکریپت). Go هم ساده است و هم آسان! از نظر ساختاری طراحی ساده‌ای دارد و یادگیری زبان غالبا بسیار نرم و روان صورت می‌گیرد. از نظر راب پایک، نقش رابط گرافیکی کاربر (GUI) را برای زبان ایفا می‌کند. بنابراین می‌توانید اطمینان داشته باشید که یک برنامه‌نویس از خانواده سی، در نهایت ظرف یک هفته بتواند با Go شروع به کار کند. کتابخانه استاندارد زبان هم نقش پررنگی در سهولت زبان ایفا می‌کند: به یک وب‌سرور پرقدرت نیاز دارید؟ می‌خواهید با آرشیوها کار کنید؟ به الگوریتم‌های هش نیازمندید؟ کار با تصاویر چطور؟ همه و همه به طور کاربردی در کتابخانه استاندارد وجود دارند تا شما وقتتان را بابت جستجو برای آ نها هدر ندهید.

همروند و موازی (Concurrency & Parallel)

Go ذاتا یک زبان همروند است. زبان همروند زبانی است که طراحی آن به طور مشخص حول محور همروند بودن شکل گرفته است.

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

وقتی برنامه‌های خود را به صورت همروند توسعه می‌دهید، علاوه بر این‌که طراحی برنامه‌تان بهتر و قابل درک‌تر خواهد شد، می‌توانید اطمینان داشته باشید که در صورت وجود امکانات سخت‌افزاری مناسب، برنامه شما بتواند به طور موازی اجرا شده و سرعت بالاتری را نیز برایتان به ارمغان بیاورد.

بهبود در ساختار کدها

خیلی‌ها فکر می‌کنند بزرگترین نقطه قوت Go امکانات همروندی آن است، در حالی که از نظر خود طراحان زبان، پیاده‌سازی منحصر به فرد Interface ها یکی از بهترین دستاوردهای آنان است. اینترفیس‌ها در زبان‌های دیگری هم حضور دارند، اما هیچکدام مانند Go پیاده‌سازی نشده‌اند. اینترفیس‌های Go شیوه duck-typing را طوری به این زبان مترجمی و استاتیک وارد کرده‌اند که این قابلیت به ستون طراحی API ها در این زبان بدل گشته است.

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

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

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

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

منبع: نشریه «سلام دنیا»، شماره اول – نوشته امیررضا قادری
برچسب ها: Golangآموزش Golangآموزش زبان Goزبان Goزبان برنامه نویسی Goزبان برنامه نویسی Golangمحتوای باز
درباره فرشید نوتاش حقیقت

همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرم‌افزارهای آزاد/ متن‌باز و سیستم‌عامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.

نوشته‌های بیشتر از فرشید نوتاش حقیقت
قبلی پایگاه داده های توکار
بعدی مروری کوتاه بر تاریخچه پروژه گنوم

دیدگاهتان را بنویسید لغو پاسخ

این سایت از اکیسمت برای کاهش جفنگ استفاده می‌کند. درباره چگونگی پردازش داده‌های دیدگاه خود بیشتر بدانید.

جستجو
جستجو برای:
دسته‌بندی موضوعی مقالات
  • برنامه‌نویسی
    • پایتون
    • دواپس
  • پایگاه‌داده
    • MariaDB
    • MySQL
  • تجارت الکترونیک
    • بازاریابی اینترنتی
    • دیجیتال مارکتینگ
    • شبکه‌های اجتماعی
  • جامعه کاربری
    • لاگ
  • دسته‌بندی نشده
  • شبکه و امنیت
  • طراحی وب
    • سئو
    • سیستم مدیریت محتوا
      • وردپرس
  • فناوری‌های نوظهور
    • اینترنت اشیاء
    • رایانش ابری
      • OpenStack
    • کلان‌داده‌ها
  • گنو/لینوکس
    • توزیع
      • CentOS
      • اوبونتو
      • دبیان
      • فدورا
    • چیست
    • خط فرمان
  • مهاجرت به آزاد/متن‌باز
  • نرم‌افزار
    • اداری
      • لیبره آفیس
        • ایمپرس
        • بیس
        • دراو
        • رایتر
        • کالک
    • کاربردی
    • گرافیک و انیمیشن
      • بلندر
      • گیمپ
نماد الکترونیکی (اینماد)
پرداخت‌یار

محتوای باز؛ مرجع آموزشی نرم‌افزارهای آزاد/ متن‌باز

از اینکه قصد همکاری با رسانه «محتوای باز» را دارید بسیار خرسندیم و این مایه مباهات ماست.

نحوه همکاری با ما چندان پیچیده نیست و شرایط آن در ادامه، ارائه گردیده است.

دستمزد مدرسین

پیش از بیان شرایط ضبط ویدئو شایان ذکر است اشاره‌ای به دستمزد مدرسین سایت داشته باشیم.

شما ممکن است در دو حالت تمایل به نشر ویدئو خود را داشته باشید: یا آن را رایگان در اختیار عموم قرار دهید و یا اینکه در قبال فروش آن از خریدار وجه مربوطه محصول را اخذ نمایید.

صرف نظر از هر حالت ممکنه، می‌بایست شرایطی که در ادامه ذکر شده‌اند را رعایت کرده باشید.

در حالت اول (رایگان) رسانه محتوای باز (Open Content)، نه وجهی از شما برای نشر ویدئو می‌گیرد و نه وجهی به شما پرداخت می‌نماید و دوره آموزشی شما را به رایگان منتشر می‌کند.

اما در حالت بعدی طریقه همکاری به روش درآمد از فروش خواهد بود، به گونه‌ای که 70 درصد از کل مبلغ فروش دوره آموزشی متعلق به مدرس دوره بوده و 30 درصد مابقی به رسانه محتوای باز تعلق می‌گیرد.

شرایط کلی ضبط دوره آموزشی

دوره آموزشی مربوطه، صرف نظر از هر محتوایی که دارد می‌بایست در یکی از توزیعات گنو/لینوکسی ضبط شده باشد. (به‌عنوان مثال دوره دروپال در اوبونتو، دوره آموزشی کار با آردوینو در دبیان و امثالهم). اگر دوره آموزشی شما در محیط ویندوز و یا هر پلتفرم/سیستم‌عامل دیگری ضبط شده باشد از همکاری با شما معذوریم.

پیشنهاد می‌گردد برای ضبط دوره آموزشی در توزیع گنو/لینوکس از ابزار قدرتمند OBS استفاده نمایید. البته این صرفا یک پیشنهاد است و شما می‌توانید از هر ابزار مناسب دیگری برای این کار بهره ببرید.

برای آشنایی یا تسلط بیشتر می‌توانید دوره رایگان آموزش OBS محمد عابدینی را ببینید:

مشاهده دوره آموزش OBS
شرایط کیفی ضبط دوره آموزشی

کیفیت صدا از اهمیت ویژه‌ای برخوردار می‌باشد و می‌بایست فاقد هر گونه نویز یا صدای اضافی دیگری (صدای محیط پیرامون) باشد.

دوره آموزشی تهیه شده صرفا باید برای رسانه محتوای باز تدوین شده باشد و در هیچ سایت مشابه دیگری قرار نگرفته باشد.

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

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

در حین دوره، مدرس نباید به برند خاصی اشاره کند که جز رقبای ما به‌شمار می‌آیند.

مدرس باید در ابتدا در اواسط و در انتهای دوره به برند ما یعنی رسانه محتوای باز (Open Content) بصورت کلامی اشاره نماید.

مدرس، هنگام تدریس نباید تپق زده، سرفه یا عطسه کند یا صدای قورت دادن بزاقش شنیده شود و بایستی با صدای رسا، دوستانه و پرانرژی به تدریس بپردازد.

قبل از تدوین دوره آموزشی حتما با ما در تماس باشید و یک ویدیوی چنددقیقه‌ای (ترجیحا 5 الی 10 دقیقه)، بصورت نمونه‌کار برای ما بفرستید.

از همکاری با شما سپاسگزاریم.

فراخوان همکاری