مقدمه نه چندان کوتاه درباره زبان Go

نیاز همیشه نیرویی بوده که باعث شده تغییرات بوجود بیایند و داستان بوجود آمدن زبان golang از احساس نیاز سه تن از کارمندان گوگل به نام‌های کن تامپسون، رابرت پایک و رابرت گریسمر آغاز شد. تخصص آنها در زمینه کامپایلر و سیستم عامل بود و هر سه از منتقدان استفاده از C++ و Java به عنوان زبان‌های اصلی مورد استفاده در گوگل بودند. آنها ایده‌ی طراحی یک زبان جدید را در سال ۲۰۰۷ در سر داشتند و اولین نسخه این زبان جدید را در سال ۲۰۱۲ منتشر کردند. آنها همچنین می‌خواستند این زبان توان پاسخ به نیازهای جدیدی که با ظهور پردازنده‌های چند هسته‌ای، کامپیوترهای متصل به هم و کلاسترهای بزرگ محاسباتی بوجود آمده بود را نیز داشته باشند.

مشکلاتی که باید حل می‌شدند

مشکلاتی که باعث شد آنها به فکر طراحی زبان golang بیفتند به شرح زیر است:

  • سرعت build کم: سیستم‌های مورد استفاده در گوگل شامل چندین میلیون خط کد است. زمان مورد نیاز برای کامپایل و لینک شدن این کدها حتی با استفاده از سیستم‌های مدرن، build کردن ساعت‌ها و حتی روز‌ها به طول می‌انجامید.
  • تیم‌های بزرگ: کار در تیم‌های بزرگ (تیمی که شما حداکثر نصف افراد آنرا می‌شناسید) معضلات خاص خود را دارد. سلایق مختلف افراد، سبک‌های متفاوت کد نویسی، عدم یکسانی سطح سواد باعث می‌شود که هریک از اعضا تیم از یک زیر مجموعه از ویژگی‌ها و قدرت‌های زبان استفاده کنند. به طبع تیم‌های بزرگ مشکلات زیر را به همراه دارد:
    • استفاده هر برنامه‌نویس از یک زیر مجموعه زبان
    • درک برنامه پایین (خوانایی پایین، مستندات کم و …)
  • وابستگی‌های غیر قابل کنترل: وابستگی‌ها بالاخص در کدهای کامپایل‌شدنی یکی از مواردی است که باعث کاهش سرعت build و همچنین افزایش حجم کدهای تولید شده می‌شود. همچنین مدیریت آنها در برنامه‌های بزرگ بسیار سخت و غیر قابل کنترل است. بوجود آورندگان golang در گوگل با بهبود نحوه مدیریت وابستگی‌ها در زبان‌های C و C++ توانستند ۴۰ درصد از حجم کد را کاهش داده و باعث افزاش سرعت build شوند.
  • هزینه بروزرسانی: در این سیستم‌ها به خاطر وابستگی‌های زیاد و تیم بزرگ، بروزرسانی کدها یا وابستگی‌ها کار بسیار سخت و دشواری است.
  • سختی نوشتن ابزارهای اتوماتیک: بخاطر بزرگی کد و وابستگی‌هایشان نوشتن روندهای اتوماتیک مانند تست، build یا deploy بسیار سخت بوده و به همین خاطر افراد بیشتری برای کارهای عملیاتی یا توسعه ابزارهای اتوماتیک نیاز است.

اهداف طراحی Go

اهداف طراحی golang عبارتند از:
– این زبان بایستی بتواند توسط تیم بزرگی از برنامه‌نویسان برای برنامه‌های بزرگ که وابستگی‌های فراوانی دارند مورد استفاده قرار گیرد.
– این زبان بایستی به زبان‌های هم‌خانواده C نزدیک باشد. زیرا بسیاری از برنامه‌نویسان گوگل تازه‌کار بوده و با برنامه‌نویسی‌ رویه‌ای و یکی از زبان‌های هم‌خانواده C آشنایی دارند. این مورد باعث کارایی زودهنگام این دست برنامه‌نویسان می‌شود.
– این زبان بایستی مدرن باشد. زبان‌های C و C++ و تا حدی Java قدیمی بوده و قبل از تکنولوژی‌های مدرن امروز مانند پرازنده‌های چند هسته‌ای، شبکه و عصر وب طراحی شده‌اند. یکی از ویژگی‌های دنیای مدرن که می‌تواند بهتر مورد بررسی قرار گیرد همروندی است.

ویژگی‌های زبان Go

در این بخش بصورت مختصر ویژگی‌های زبان ارائه می‌شود.

  • کوچک بودن: این زبان به نسبت زبان‌های دیگر کوچک است.
    • تعداد کلمات کلیدی این زبان (۲۵ کلمه) نسبت به سایر زبانها مانند C++11(۸۶ کلمه)، Java(۵۰ کلمه)، ES6(۴۸ کلمه)، پایتون۳(۳۳ کلمه) و سی (۳۲ کلمه) کمتر است.
    • سینتکس این زبان برای آنان که C یاد گرفته اند ساده و روان است.
    • مستندات عالی برای شروع دارد. (+ + +)
  • مدیریت وابستگی‌ها: این زبان به نحوه جالبی وابستگی‌ها را مدیریت می‌کند. ویژگی‌های این فرآیند به صورت زیر است:
    • نیازی به فایل Header نیست.
    • وابستگی‌های استفاده‌نشده باعث کامپایل‌نشدن کد می‌شوند.
    • در گراف وابستگی‌های فایل‌های یک پروژه نبایستی دور وجود داشته باشد.
  • رویه‌گرا: رویه‌گرایی در این زبان باعث می‌شود که ساختار برنامه شبیه به C باشد. ممکن است برای شما این سوال پیش آید که آیا golang یک زبان شی‌گراست یا نه؟ جواب به این سوال هم آری است هم نه.
    جواب به این سوال می‌تواند نه باشد زیرا:

    • اثری از کلاس‌ها و ارتباط بین آنها نیست.
    • همه چیز یک object نیست.
    • خبری از الگوهای طراحی نیست.
    • چارچوب‌ها و کتابخانه‌های پیچیده شی‌گرایی وجود ندارند.
      جواب به این سوال آری است زیرا:
    • مکانیزم‌های تبادل پیام وجود دارد.
    • پنهان‌سازی و کپسوله‌سازی وجود دارد.
    • چندریختی و polymorphism وجود دارد.
    • وراثت وجود دارد.
  • تایپ استاتیک: سیستم مدیریت تایپ‌های زبان golang ایستا است. بدین معنی که تایپ‌ها در زمان کامپایل چک می‌شوند. همچنین وجود تایپ ایستا باعث می‌شود کامپایلر بتواند بهینه‌سازی بیشتری روی متغیرهای کد نهایی ایجاد کند.
  • کامپایل به کد ماشین و لینک استاتیک: این باعث می‌شود که کدها کامپایل شده و در سیستم عامل مقصد اجرا شود. در نتیجه:
    • هیچ مفسری وجود ندارد.
    • ماشین مجازی وجود ندارد مانند JVM.
    • هیچ ترجمه‌ی زمان اجرایی وجود ندارد مانند JIT در .Net Framework.
    • هیچ پیش‌نیازی برای اجرا وجود ندارد.
  • دارای سیستم runtime و Garbage Collection : سیستم runtime بدین صورت است که زیرساختی برای اجرای ویژگی‌های همروندی golang ایجاد می‌کند. در حقیقت این سیستم بسیاری از موارد پر دردسر همروندی را از دید برنامه نویس مخفی می‌کند. همچنین این سیستم باعث می‌شود که بتوان در این زبان از روند Garbage Collection استفاده کرد. این امر باعث ساده‌شدن روند مدیریت حافظه و کاهش خطاهای زمان اجرا می‌شود.
  • امکانات سطح بالای همروندی: برنامه‌نویسی همروند اصلا کار آسانی نبوده و نیست. همروندی در سطوح مختلفی قابل دستیابی است. در بالاترین سطح می‌توان چندین پروسه داشت که کارهای مشابه‌ای انجام می‌دهند، اما پروسه‌ها بسیار سنگین و پرهزینه هستند. استفاده از Threadها به علت سبک‌تر بودن می‌تواند مشکلات را کاهش دهد. راه حل سوم پیشنهاد شده استفاده از برنامه‌نویسی غیرهمگام است که باعث پیچیدگی بسیار توسعه و عیب‌یابی نرم‌افزار می‌گردد. golang با معرفی مکانیزم goroutine و با کمک runtime روند توسعه نرم‌افزار غیر همگام را به شدت ساده می‌کند. ویژگی‌های goroutineها عبارتند از:
    • ایجاد آنها همانند Threadها در زمان اجرا
    • استفاده اشتراکی از حافظه
    • زمان‌بندی goroutine ها در runtime انجام می‌شود.
    • تعدادی goroutine برای اجرا روی چندین Thread اجرا می‌شوند.
    • سایز حافظه goroutine ها در زمان اجرا تغییر می‌کند.
      همچنین امکان ارتباط میان goroutine به کمک مکانیزم تبادل پیام در ویژگی‌های اولیه زبان بوجود آمده است.
  • کتابخانه استاندارد غنی: golang کتابخانه‌های بسیاری برای کارهای مختلف دارد که این کتابخانه باعث افزایش سرعت توسعه می‌گردد.
  • ابزارها: golang ابزارهایی بار کامپایل، نصب، build و حتی بهبود فرمت کد دارد.

ایرادات وارده بر Go

برخی از ویژگی‌های golang خود می‌تواند از منظری نوعی نقص و کمبود باشد.

  • کوچک بودن زبان عملا باعث می‌شود بسیاری از امکاناتی که در زبان‌های دیگر وجود دارد در این زبان وجود نداشته باشد. ممکن است کاری که در زبان‌های دیگر به سادگی قابل انجام است در این زبان با مشکل همراه شود.
  • سیستم تایپ استاتیک زبان به علت کوچک بودن امکاناتی را که سیستم‌هایی مانند جاوا در اختیار کاربران قرار می‌دهد را ندارد.
  • عدم وجود شی‌گرایی باعث ایجاد دردسرهایی شده و حتی امکان استفاده مجدد از کد و تجربیات گذشته را از بین می‌برد.
  • وجود سیستم runtime باعث می‌شود در سیستم‌های mission critical نتوان با قطعیت در مورد زمان‌بندی و اجرای کدها تصمیم گرفت که عملا این زبان را از رده‌ی زبان‌های سیستمی دور می‌شود.
  • وجود مکانیزم ارتباط بین goroutine ها عملا سربار زمان اجرا اعمال کرده و در حالت‌هایی که ارتباط بسیاری میان اجزای سیستم برقرار است این سربار قابل توجه است.

چه کسانی از Go استفاده می‌کنند؟

  • پروژه docker به عنوان یکی از بزرگترین استفاده کننده‌ها از این زبان است. این پروژه با بوجود آوردن یک لایه روی امکانات کرنل لینوکس و با استفاده از یک مسیر کسب و کاری جدید این امکان را فراهم آورده تا container ها دوباره بحث داغ این روزها باشند.
  •  Google به عنوان مثال در youtube از golang استفاده می‌کند. به عنوان مثال می‌توان به پروژه vitess اشاره کرد.
  • سرویس Heroku یکی دیگر از استفاده کنندگان این زبان است و به عنوان مثال درایور postgresql در زبان golang توسط آنها نگهداری می‌شود. این پایگاه داده بخش مهمی در زیرساخت این شرکت است.
  • شرکت Canonical سیستم juju خود را بصورت کامل با این زبان بازنویسی کرده‌است.
  • شرکت soundcloud نیز در زیرساخت خود از این زبان استفاده می‌کند.
  • سرویس bitly، این سرویس نیز برای پاسخگویی به هزاران درخواست در ثانیه سیستم خود را بصورت کامل توسط golang بازنویسی کرده است.
  • سرویس Iron.io که یک سیستم انجام محاسبات در محیط ابری است کل سرویس خود را به golang مهاجرت داده است.
  • سرویس Drone.io یک سیستم continous integration است که به زبان golang توسعه یافته است.

منابع و مطالعه بیشتر

 

عباس یزدان پناه

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

همچنین ممکن است دوست داشته باشید ...

۱۸ واکنش

  1. امیررضا گفت:

    امیدوارم یک روزی برنامه‌نویس ها متوجه بشن که شی‌گرایی اون چیزی که فکر میکنن نیست… هر چی بیشتر طرف شی ‌گرایی بریم، بیشتر ضرر میبینیم…

    • محمد رضا گفت:

      ممکنه توضیح بدید قرار هست بعد چه ساختاری بتونه جایگزین شی گرایی بشه؟؟

      • عباس یزدان پناه گفت:

        تا اونجایی که من میدونم قرار نیست چیزی جایگزین شی‌گرایی بشه. اتفاقی که توی go افتاده اینه که زیر مجموعه‌‌ای از اون چیزی که بصورت معمول شی‌گرایی خطاب میشه پشتیبانی می‌شه و شکل اون پشتیبانی با روند معمول هم متفاوته!

        وگرنه شی‌گرایی هست و قرار نیست با چیزی جایگزین بشه.

  2. فرود گفت:

    خیلی هم جالب، ولی هم مزایا، و هم ویژگیهایی که برای این زبان گفتید، من فکر کردم دارم درباره یه زبان جدید میخونم نه Go که یک سالی میشه دارم ازش استفاده میکنم :)))
    زبان مزایای خودشو داره، که شما کلا نگفتید، معایب واقعی هم داره که اونم باز شما نگفتید 🙂

    – اثری از کلاس‌ها و ارتباط بین آنها نیست و الگوهای طراحی خبری ازشون نیست 🙂 #wtf
    – بعد میگین وراثت داره 🙂 مطمئنید که منظور شما Go است؟؟ چون من میدونم که نداره. امبدینگ وراثت نیست.
    – سیستم تایپ استاتیک زبان به علت کوچک بودن امکاناتی را که سیستم‌هایی مانند جاوا در اختیار کاربران قرار می‌دهد را ندارد. #wtf #again
    – عدم وجود شی‌گرایی باعث ایجاد دردسرهایی شده و حتی امکان استفاده مجدد از کد و تجربیات گذشته را از بین می‌برد. #facepalm

    یه سری هم حرف درباره ران تای و این حرفاست، که جای بخث داره، ولی این پاراگراف آخری چنان داغونه که اونها اصلا به چشم نمیان 🙂

    • عباس یزدان پناه گفت:

      اول از همه بگم که به نظر میرسه من به عنوان نویسنده این مقاله با چراغ خاموش رفتم سراغ اتاقی که توش فیل بوده و نظرات خودم رو نوشتم که ممکنه کامل و جامع نباشه.

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

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

      – منظور از اینکه «کلاس‌ها و ارتباط بین آنها نیست و الگوهای طراحی خبری ازشون نیست » اینه که شما به شکل کلاسیک متدها و داد‌ه‌ها رو با هم couple‌ نمیکنید و اینکه وراثت به شکل کلاسیکش وجود نداره. در مورد الگوهای طراحی هم باید بگم که به سبکی که GoF الگوها رو بررسی می‌کنن نمیشه مستقیم توی go پیاده‌شون کرد و باید فکر کرد و اونها رو تبدیل کرد.
      – وراثت شکلهای مختلفی داره. از اونجایی که مفهوم interface وجود داره من تا اونجایی که میدونم توی زبان c++ میشه اینکه ما یک pure abstract class داریم که پیاده‌سازی میشه. پس این یعنی یه ردپاهایی از وراثت اینجا وجود داره اما وراثت بشکل کلاسیک وجود نداره.
      – در مورد تایپ ها دقیقا منظور استفاده از چیزهایی مثل myTestClass.class بوده که میشه در زمان اجرا از اینکه تایپ یه کلاس یا متغیر چیه باخبر شد و حتی بصورت داینامیک لودش کرد که اینکار در زبان C , C++‌ و به نظر من go سخت تره. پس از نظر من امکانات کمتری میده.
      – برای کسانی که تازه وارد این زبان می‌شوند عدم وجود شی‌گرایی به شکل کلاسیک باعث میشه که اکثرا گیج بشن(مثلا خود من و دوستانی که سعی کردم براشون go رو توضیح بدم). کسی که به شکل کلاسیک شی‌گرایی کار کرده نمی‌تونه دقیقا از همون تجربیات اینجا استفاده کنه و کد موجود حتی از نظر طراحی هم باید دستخوش تغییر بشه تا اینکه بشه تو go ازش استفاده کرد.

      • فرود گفت:

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

        — من اصلا قصدم کوبیدن این پست نیست. خیلی هم خوبه که درباره Go نوشته بشه، و حتی معتقد نیستم که من ۱۰۰ در ۱۰۰ درست میگم. فقط دوست دارم که یه کم بیشتر و مشخص تر باشه همه چی 🙂

  3. فرود گفت:

    Juju به این زبان بازنویسی نشده، از اول با این زبان نوشته شده.

  4. امیررضا گفت:

    @عباس یزدان پناه

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

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

    نتیجه این میشه خیلی ها درک درستی از پایه‌ای ترین مباحث برنامه‌نویسی پیدا نمیکنن، و با اینحال، در خیال خودشون فکر میکنن که در تمام مباحث تخصص دارند. برای همین قبل از نوشتن همچین مقالاتی، باید کلی زحمت بکشید تا مفاهیمی که قراره تو نوشته استفاده کنید رو توضیح بدید، و بعد برسید به خود نوشته! فرضا شی‌گرایی چیه؟ فکر میکنید اونی که شما با جاوا و سی پلاس پلاس میشناسید شی‌گرایی هست؟ یا وراثت دقیقا چیه؟ فکر میکنید وراثت جزو شی گرایی هست؟ یا زبانی که شی‌گرا نیست، و برنامه ای که به صورت شی گرا نوشته نشده دارای کمبوده و کیفیت پایین تری داره؟ تایپ‌ها، برنامه نویسی همروند، تردها و پروسه ها، عملیات ناهمگام، سیستم ران تایم، سیستم GC، مباحث حافظه،…

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

    به عنوان یه دوست، این تجربه رو از من پذیرا باش، نوشتن این مدل مقاله ها در وب فارسی هیچوقت نتیجه‌ی خوبی نداره! 🙂

    پ.ن: مسلم هست که تمام برنامه نویس های فارسی زبان، از سطح معلومات بالایی برخوردارند. اون عده‌ای که من بهشون اشاره کردم تعداد انگشت شماری دارند. من خودم رو هم جزو همون عده قلمداد میکنم!
    پ.ن: من نویسنده این منبع (http://forum.ubuntu.ir/index.php?topic=50072.0) و منبعی هستم که در لینک اول تون معرفی کردید.

    • عباس یزدان پناه گفت:

      @امیررضا
      دست شما درد نکنه.

      من به شخصه به این نتیجه رسیدم که سعی کنم به جامعه کاربری تا جایی که براش توان دارم چیز میز اضافه کنم اما زمانی هم قطعا میرسه که نمیتونم بنویسم و مهمتر از همه بشنوم.

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

      همین!

  5. صابر گفت:

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

  6. آرمیشا گفت:

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

  7. maysam گفت:

    من یه پروژه گولنگ کوچیک دارم اگه کسی علاقه مند باشه

  8. سرمه ای گفت:

    بسیار مفید بود، ممنون

  9. ممنون از توضیحات مفید تون

  1. ۰۶-تیر , ۱۳۹۴

    […] یا کدنویسی با آن را تجربه کرده‌اید و یا احتمالا مقاله معرفی زبان Go را در مجله هایو مطالعه کرده‌اید که بحث‌های زیادی هم […]

  2. ۱۳-شهریور , ۱۳۹۴

    […] باشم . برای آشنایی بیشتر با این زبان می توانید از این مقاله جمع و جور فارسی هم استفاده کنید . منابع و کتابهای رایگان زبان GO‌ را هم […]

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *