مقدمه
Go که به آن Golang یا Go نیز گفته می شود، یک زبان برنامه نویسی متن باز است که گوگل توسعه داده است. توسعه دهندگان نرم افزار از Go در مجموعه ای از سیستم عامل ها و چارچوب ها برای توسعه برنامه های کاربردی وب، سرویس های ابری و شبکه و انواع دیگر نرم افزارها استفاده می کنند.
Go به صورت ایستا تایپ، صریح و بر اساس زبان برنامه نویسی C مدل شده است. به دلیل زمان راهاندازی سریع زبان Go، سربار زمان اجرا کم و توانایی اجرای بدون ماشین مجازی (VM)، این زبان به زبان بسیار محبوبی برای نوشتن میکروسرویسها و سایر کاربردها تبدیل شده است. علاوه بر این، Go برای برنامه نویسی همزمان استفاده می شود – استراتژی برای اجرای چندین کار در یک زمان، خارج از نظم یا به ترتیب جزئی.
زبان Go از بهره وری و سادگی نسبی پایتون الهام گرفته شده است. از گوروتین ها یا فرآیندهای سبک وزن و مجموعه ای از بسته ها برای مدیریت وابستگی کارآمد استفاده می کند. برای حل چندین مشکل، از جمله زمان ساخت آهسته، وابستگی های کنترل نشده، تکرار تلاش، مشکل در نوشتن ابزارهای خودکار و توسعه بین زبانی طراحی شده است.
در اینجا برخی از ویژگی های کلیدی Go آورده شده است:
- سادگی: Go طوری طراحی شده است که یادگیری و استفاده آسان باشد. سینتکس آن ساده و سرراست است و برای مبتدیان و برنامه نویسان باتجربه انتخاب خوبی است.
- Concurrency: Go دارای پشتیبانی داخلی برای همزمانی است که به توسعه دهندگان اجازه می دهد کدهای کارآمد و مقیاس پذیر برای سیستم های چند هسته ای و توزیع شده بنویسند.
- جمع آوری زباله: Go دارای مدیریت حافظه خودکار است که توسعه دهندگان را از نگرانی در مورد تخصیص و تخصیص حافظه رها می کند.
- زمان کامپایل سریع: Go یک کامپایلر سریع دارد که تکرار سریع آن را در طول توسعه آسان می کند.
- پشتیبانی از پلتفرم های مختلف: Go را می توان برای اجرا در بسیاری از پلتفرم های مختلف از جمله ویندوز، لینوکس و macOS کامپایل کرد.
- تایپ قوی: Go یک زبان تایپ ایستا است که به تشخیص خطاها در زمان کامپایل و نه در زمان اجرا کمک می کند.
- Go دارای یک جامعه بزرگ و رو به رشد از توسعه دهندگان است و توسط بسیاری از شرکت های معروف از جمله گوگل، اوبر و دراپ باکس استفاده می شود.
در اینجا چند نکته مهم در مورد زبان برنامه نویسی Go وجود دارد:
- Go یک زبان تایپ ایستا است، به این معنی که نوع یک متغیر باید قبل از استفاده از آن اعلام شود.
- Go یک زباله جمع کن داخلی دارد که به طور خودکار حافظه را در مواقعی که دیگر مورد نیاز نیست آزاد می کند.
- Go پشتیبانی قوی از همزمانی دارد و به توسعه دهندگان این امکان را می دهد که کدهای کارآمد و مقیاس پذیر برای سیستم های چند هسته ای و توزیع شده بنویسند.
- Go یک نحو مینیمالیستی دارد که یادگیری و خواندن آن آسان است.
- Go یک کامپایلر سریع دارد که کدی را تولید می کند که برای معماری های سخت افزاری مدرن بهینه شده است.
- Go دارای یک کتابخانه استاندارد است که از طیف گسترده ای از عملکردها، از جمله شبکه، رمزگذاری و مدیریت فایل پشتیبانی می کند.
- Go دارای یک جامعه رو به رشد از توسعه دهندگان و یک اکوسیستم پر جنب و جوش از بسته ها و ابزارهای شخص ثالث است.
- Go توسط بسیاری از شرکت های معروف برای ساخت سیستم های توزیع شده در مقیاس بزرگ و برنامه های کاربردی با کارایی بالا استفاده می شود.
- به طور کلی، Go یک زبان برنامه نویسی قدرتمند و کارآمد است که برای ساخت برنامه های کاربردی مدرن و سیستم های توزیع شده مناسب است. پشتیبانی قوی آن از همزمانی و نحو مینیمالیستی، آن را به انتخابی جذاب برای توسعه دهندگانی تبدیل می کند که می خواهند برنامه های کاربردی مقیاس پذیر و کارآمد بسازند.
Go همچنین دارای یک نحو ساده و یک سیستم نوع ساده است که یادگیری و استفاده از آن را حتی برای افرادی که هیچ تجربه قبلی در برنامه نویسی ندارند آسان می کند.
در اینجا یک “Hello World” برنامه در Go:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
IDE های آنلاین مختلفی مانند The Go Playground، repl.it و غیره وجود دارد که می توان از آنها برای اجرای برنامه های Go بدون نصب استفاده کرد.
برای نصب Go در رایانه شخصی یا لپ تاپ خود به دو نرم افزار زیر نیاز داریم: Text Editor و Compiler
ویرایشگر متن: ویرایشگر متن بستری را در اختیار شما قرار می دهد که در آن کد منبع خود را بنویسید. لیست ویرایشگرهای متن در زیر آمده است:
- Windows notepad
- OS Edit command
- Brief
- Epsilon
- vm or vi
- Emacs
- VS Code
یافتن یک کامپایلر Go: توزیع Go به صورت باینری قابل نصب برای FreeBSD (نسخه 8 و بالاتر)، لینوکس، Mac OS X (Snow Leopard و بالاتر) و سیستم عامل های ویندوز با 32 بیت (386) و 64 بیت (amd64) ارائه می شود. ) معماری پردازنده x86.
نوشتن اولین برنامه در Go:
package main
import "fmt"
func main() {
// prints geeksforgeeks
fmt.Println("Hello, geeksforgeeks")
}
توضیح نحو برنامه Go:
خط 1: شامل بسته اصلی برنامه است که محتوای کلی برنامه را دارد. نقطه اولیه اجرای برنامه است، بنابراین نوشتن آن اجباری است.
خط 2: حاوی عبارت import “fmt” است. در Go (Golang)، عبارت import برای گنجاندن بستههای خارجی استفاده میشود که قابلیتهای بیشتری را فراتر از ویژگیهای زبان داخلی ارائه میدهند. در این مورد، “fmt” بسته ای است که عملکردهایی را برای قالب بندی ورودی و خروجی ارائه می دهد.
خط 3: تابع اصلی، شروع اجرای برنامه است.
خط 4: ()fmt.Println یک تابع کتابخانه استاندارد برای چاپ چیزی به عنوان خروجی روی صفحه است. در این بسته fmt روش Println را ارسال کرده است که برای نمایش خروجی استفاده می شود.
نظر: نظرات برای توضیح کد استفاده می شود و به روشی مشابه در جاوا یا C یا C++ استفاده می شود. کامپایلرها ورودی های نظر را نادیده می گیرند و آنها را اجرا نمی کنند. نظرات می توانند تک خطی یا چند خطی باشند.
چرا این “Go language”؟
زیرا زبان Go تلاشی برای ترکیب سهولت برنامه نویسی یک زبان تفسیر شده و تایپ شده پویا با کارایی و ایمنی یک زبان تایپ شده و کامپایل شده است. همچنین هدف آن مدرن بودن با پشتیبانی از محاسبات شبکه ای و چند هسته ای است.
چه چیزی به استثنای Go که در زبان های دیگر وجود دارد؟
- Go تلاش می کند تا میزان تایپ را به هر دو معنای کلمه کاهش دهد. در طول طراحی آن، توسعه دهندگان تلاش کردند تا درهم و برهمی و پیچیدگی را کاهش دهند.
- هیچ اعلان پیش رو و هیچ فایل هدر وجود ندارد. همه چیز دقیقا یک بار اعلام می شود.
- لکنت با اشتقاق نوع ساده با استفاده از ساختار := declare-and-initialize کاهش می یابد.
- هیچ نوع سلسله مراتبی وجود ندارد: تیپ ها فقط هستند، آنها مجبور نیستند روابط خود را اعلام کنند.
محدودیت های سخت افزاری
ما مشاهده کرده ایم که در یک دهه، پیکربندی سخت افزار و پردازش با سرعت بسیار پایینی در حال تغییر است. در سال 2004، P4 دارای سرعت کلاک 3.0 گیگاهرتز بود و اکنون در سال 2018، Macbook pro دارای سرعت کلاک تقریباً (2.3 گیگاهرتز در مقابل 2.66 گیگاهرتز) است. برای سرعت بخشیدن به عملکرد، از پردازنده های بیشتری استفاده می کنیم، اما استفاده از پردازنده بیشتر هزینه نیز افزایش می یابد. و به همین دلیل از پردازنده های محدود استفاده می کنیم و با استفاده از پردازنده محدود یک زبان برنامه نویسی سنگین داریم که Threading آن حافظه بیشتری را می گیرد و عملکرد سیستم ما را کاهش می دهد. از این رو برای غلبه بر چنین مشکلی Golang به گونه ای طراحی شده است که به جای استفاده از threading از Goroutine استفاده می کند که شبیه به threading است اما حافظه بسیار کمتری مصرف می کند.
مانند threading 1 مگابایت مصرف می کند در حالی که Goroutine 2KB حافظه مصرف می کند، بنابراین در همان زمان، می توانیم میلیون ها گوروتین را راه اندازی کنیم.
بنابراین نکته ای که در بالا به آن پرداخته شد، golang را به یک زبان قوی تبدیل می کند که همزمان با C++ و جاوا را مدیریت می کند.
مزایا و معایب Go Language
مزایا:
- انعطاف پذیر – مختصر، ساده و خواندنی است.
- Concurrency – این اجازه می دهد تا چندین فرآیند به طور همزمان و به طور موثر اجرا شوند.
- نتیجه سریع – زمان تدوین آن بسیار سریع است.
- کتابخانه – یک کتابخانه استاندارد غنی را فراهم می کند.
- جمع آوری زباله – یکی از ویژگی های کلیدی رفتن است. Go در ارائه کنترل زیادی بر تخصیص حافظه برتری دارد و تأخیر را در جدیدترین نسخههای جمعآوری زباله به طرز چشمگیری کاهش داده است.
- برای تعبیه رابط و نوع اعتبارسنجی می کند.
- Concurrency: Go پشتیبانی عالی از همزمانی را فراهم می کند و نوشتن کدی را که می تواند چندین کار را به طور همزمان انجام دهد آسان می کند. این از طریق گوروتین ها و کانال ها به دست می آید که به شما امکان می دهد کدی بنویسید که بتواند چندین عملیات را همزمان اجرا کند.
- عملکرد: Go به گونه ای طراحی شده است که سریع و کارآمد باشد، با تمرکز بر عملکرد و مصرف کم حافظه. این باعث می شود که برای ساخت سرویس های شبکه با کارایی بالا و همچنین برای حل مسائل پیچیده محاسباتی مناسب باشد.
- سادگی: Go دارای یک نحو ساده و یک سیستم نوع ساده است که یادگیری و استفاده از آن را حتی برای افرادی که تجربه برنامه نویسی قبلی ندارند آسان می کند.
- جمع آوری زباله: Go دارای جمع آوری زباله داخلی است که به طور خودکار حافظه را برای شما مدیریت می کند. این امر نیاز به مدیریت دستی حافظه را از بین می برد و احتمال نشت حافظه و سایر اشکالاتی را که می تواند از مدیریت دستی حافظه ایجاد شود، کاهش می دهد.
- Statically Typed: Go یک زبان تایپ استاتیک است، به این معنی که انواع در زمان کامپایل تعیین می شوند. این ایمنی نوع قویتری را فراهم میکند و تشخیص اشکالات مربوط به نوع را قبل از وقوع آسانتر میکند.
معایب:
- هیچ پشتیبانی از ژنریک ها ندارد، حتی اگر بحث های زیادی در مورد آن وجود داشته باشد.
- بسته های توزیع شده با این زبان برنامه نویسی بسیار مفید هستند اما Go به معنای متعارف آنچنان شی گرا نیست.
- برخی از کتابخانه ها به خصوص یک کیت ابزار UI وجود ندارد.
- ویژگی های محدود شی گرا: Go ویژگی های شی گرا کاملی مانند وراثت و چندشکلی ندارد. این می تواند نوشتن برنامه های پیچیده را دشوارتر کند، به ویژه برای توسعه دهندگانی که به زبان های شی گرا سنتی عادت دارند.
- بدون Generics: Go پشتیبانی داخلی برای ژنریک ندارد، که نوشتن کد قابل استفاده مجدد را دشوار می کند.
- کتابخانه استاندارد نابالغ: کتابخانه استاندارد Go نسبتا جدید است و هنوز در حال بلوغ است، که می تواند پیدا کردن ابزار مورد نیاز برای یک کار خاص را دشوار کند.
برخی از برنامه های محبوب توسعه یافته در زبان Go
- داکر: مجموعه ای از ابزارها برای استقرار کانتینرهای لینوکس
- Openshift: یک پلت فرم رایانش ابری به عنوان یک سرویس توسط Red Hat.
- Kubernetes: آینده فرآیندهای استقرار خودکار یکپارچه
- Dropbox: برخی از اجزای حیاتی خود را از پایتون به Go منتقل کرد.
- نتفلیکس: برای دو بخش از معماری سرور آنها.
- InfluxDB: یک پایگاه داده سری زمانی متن باز است که توسط InfluxData توسعه یافته است.
- گولنگ: خود زبان در گو نوشته شده است.