زبان برنامه نویسی Go یا گو در سال 2009 توسط کن تامپسون و رابرت گریسیمر و راب پایک در شرکت گوگل طراحی و توسعه داده می شود. در ادامه برای آشنایی بیشتر با این زبان برنامه نویسی همراه داتیس نتورک باشید.
زبان برنامه نویسی Go چیست؟
زبان برنامه نویسی گو در سال 2009 معرفی شد. تامپسون و رابرت گریسیمر و راب پایک توسعه دهندگان این زبان برنامه نویسی در شرکت Google هستند.
یک زبان برنامهنویسی ترجمهشده و دارای زباله جمعکن و همروند است و در حال حاضر در چند سامانه اجرایی گوگل استفاده میشود.
مترجم Go از لینوکس، مک، ویندوز و انواع سیستمهای عامل BSD مانند FreeBSD پشتیبانی میکند.
از لحاظ معماری پردازنده نیز، معماری x86، معماری x64، معماری Arm و معماری POWER که مخصوص به شرکت آی بی ام است، توسط مترجم گو پشتیبانی میشوند.
شی گرایی در Go
در زبان گو، ارث بری یا Inheritance نوعها وجود ندارد. در این زبان، میتوان برای هر نوع دادهای، حتی برای نوعهای داخلی، مثل اعداد صحیح فاقد بستهبندی، تابع عضو تعریف کرد، و این عمل محدود به ساختها نمیشود.
در زبان Go از رابطها یا Interfaces میتوان برای تعریف رفتار یک شی استفاده کرد. هر رابط مجموعهای از تعریف توابع است، و هر نوعی که توابع این رابط را داشته باشد، این رابط را پیادهسازی کردهاست.
در نمونه زیر، یک رابط تعریف شدهاست که یک تابع به نام Abs و نوع خروجی float64 مشخص کردهاست. هر نوعی که این تابع را پیادهسازی کند، در واقع این رابط را پیادهسازی کردهاست. به عنوان نمونه، هم MyFloat و هم Vertex این چنین هستند.
type Abser interface { Abs() float64 } type MyFloat float64 func (f MyFloat) Abs() float64 { if f <0 { return float64(-f) } return float64(f) } type Vertex struct { X, Y float64 } func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { var a Abser f := MyFloat(-math.Sqrt2) v := Vertex{3, 4} a = f // a MyFloat implements Abser fmt.Println(a.Abs()) a = v // a Vertex implements Abser fmt.Println(a.Abs()) }
طراحی زبان برنامه نویسی گو
زبان برنامهنویسی Go به شیوهای طراحی شده است که ضمن برطرف کردن انتقادهای رایج از دیگر زبانها، ویژگیهای مثبت آنها را حفظ کند. زبان جدید شامل ویژگیهای زیر بود:
- به صورت ایستا نوشته شده، مقیاس پذیر به سیستمهای بزرگ (به عنوان جاوا و C ++)
- نیاز به محیطهای توسعه یکپارچه ندارند، اما از آنها حمایت میکنند پشتیبانی از شبکه و چند پردازش
Go بهطور قابل توجهی در سنت C است، اما باعث تغییرات بسیاری میشود که به منظور شفافیت، سادگی و ایمنی ایجاد میشود:
یک روش نحوی و محرک پذیرش الگوهای رایج در زبانهای پویا:
- مدیریت بستههای از راه دور و مستندات بسته آنلاین
- توصیف اولیه متغیر مختصر و اولیه از طریق استنتاج نوع (x := 0 not int x = 0; or var x = 0;)
- زمان تدوین سریع
رویکردهای متمایز به مشکلات خاص Go:
- یک سیستم رابط به جای ارث مجازی، و نوع جایگذاری به جای ارثی غیرمجازی
- ابتکارهای همپوشانی ساخته شده: فرایندهای سبکوزن یا Goroutines، کانالها و بیانیه انتخاب
ضعف های زبان برنامه نویسی Go
نظر منتقدان درباره زبان برنامه نویسی گو:
- عدم وجود سیستم نوع Hindley-Milner برای تأیید ایمنی
- فقدان ژنریکهای زمان کامپایل منجر به تکرار کپی میشود، metaprogramming نمیتواند به صورت ایستا بررسی شود و کتابخانه استاندارد نمیتواند الگوریتمهای عمومی ارائه دهد
- کندی سرعت و اشغال حافظه بیش از حد رم به شکل معماری گوروتین
- یک پارچگی نبودن همروندی اطلاعات در کامپایل خروجی رم به حافظه
- فقدان گسترش زبان (از طریق، به عنوان مثال، بیش از حد اپراتور) باعث میشود تا وظایف خاص به صورت مقدماتی انجام شود
امیدواریم مقاله آشنایی با زبان برنامه نویسی Go برای شما مفید بوده باشد
داتیس نتورک را در شبکه های اجتماعی دنبال کنید