آموزش GO

دسته بندی: آموزش طراحی وب

آموزش گو

در این صفحه می خوانید :

معرفی زبان GO

هیچ چیز یک برنامه نویس را هیجان زده تر از یک زبان برنامه نویسی جدید نمی کند. با بررسی وضعیت فعلی نرم افزار و سخت افزار کامپیوتر متوجه میشویم که چرا باید به زبان جدیدی مانند Go برویم. در طول یک دهه گذشته قدرت پردازش خام رشد کمی داشته و عملکرد فرکانس پردازنده تقریبا دریک دهه ثابت باقی مانده است. اگر فکر می کنید که اضافه کردن ترانزیستور بیشتر راه حل است، شما اشتباه می کنید. به این دلیل است که در مقیاس کوچکتر، خواص کوانتومی شروع به ظهور می کنند و هزینه های بیشتری برای تولید ترانزیستورها وجود دارد. برای حل مشکل تولید کنندگان شروع به اضافه کردن هسته های بیشتر به پردازنده کردند. امروزه پردازنده های چهار هسته ای و هشت هسته ای موجود است.همچنین بیش از حد Threading معرفی شده و برای افزایش عملکرد مخزن بیشتری به پردازنده اضافه شده است. اما راه حل ها نیز محدودیت های خود را دارند. ما نمی توانیم Cache بیشتری به پردازنده اضافه کنیم تا عملکرد را افزایش دهیم زیرا Cache دارای محدودیت های فیزیکی است. اضافه کردن هسته بیشتر به پردازنده نیز هزینه بر است. بنابراین، اگر ما نمیتوانیم به پیشرفت های سخت افزاری تکیه کنیم، تنها راه رفتن به نرم افزار کارآمدتری برای افزایش کارایی است. از سوی دیگر GO در سال 2009 هنگامی که پردازنده های چند هسته ای در دسترس بودند، منتشر شد. به همین دلیل GO با در نظر گرفتن هماهنگی ساخته شده است.  مکانیسم های همزمان آن، نوشتن برنامه هایی را که بیشتر از سیستم های چند هسته ای و شبکه ای استفاده می کنند، آسان می کند. در حالی که سیستم نوع جدید GO ساخت برنامه های انعطاف پذیر و مدولار را امکان پذیر می سازد. به جای تمرکز بر نظریه های علمی و فکری، بر شیوه های دنیای واقعی جهت ساختن برنامه های نسل بعدی در ابر و همچنین محاسبات توزیع شده و محاسبات همزمان و برنامه ریزی سیستم است.

تاریخچه زبان GO

GO یک زبان برنامه نویسی رویه ای است که در سال 2007 توسط رابرت گریسمر، راب پایک و کن تامپسون در شرکت Google توسعه داده شد و در سال 2009 به عنوان زبان برنامه نویسی منبع باز راه اندازی شد. در حال حاضر در چند سامانه اجرایی گوگل استفاده می‌شود. مترجم GO از Linux ، Mac Os ، Windows و انواع سیستم‌های عامل BSD مانند FreeBSD پشتیبانی می‌کند. از لحاظ معماری پردازنده نیز معماریX86، معماری X64، معماری ARM و معماری Power که مخصوص به شرکت IBM است، توسط مترجم GO پشتیبانی می‌شوند.

معماری زبان GO

GO دارای ابزار تجزیه و تحلیل استاتیک چندگانه و قوی است. یکی از آن موارد go fmt است، که کد شما را براساس سبک پیشنهادی Go طراحی می کند. این می تواند بسیاری از نظرات را در یک پروژه عادی را حذف کند و تیم شما را به تمرکز بر روی کد ترغیب کند. یک زبان برنامه نویسی بومی ساخته شده و جمع آوری شده است که عمدتا متعلق به خانواده زبان C از نظر نحو پایه است. یک اصطلاح نمایشی را با سیستم سبک وزن ارائه می دهد و همزمان با یک ویژگی داخلی در سطح زبان می باشد. مانند C و ++C به کد ماشین کامپایل می شود ، به طوری که ما نیازی به محیط هایی مانند CLR و JVM برای اجرای برنامه های Go نداریم. این به ویژه در هنگام کامپایل برنامه های بزرگ کمک می کند. زبان ساده و مینیمالیستی با طراحی واقع بینانه GO به جای  Thread به goroutines  پرداخته است. در Go محدودیت حداقل اندازه پشته زمانی که یک goroutine ایجاد می شود از 4KB به 8KB برداشته شده است.

ویژگی های زبان GO

ویژگی زبان گو

GO مانند زبانهای سطح پایین مانند C++ / C  کد را کامپایل می کند. به این معنی است که عملکرد تقریبا نزدیک به زبان های سطح پایین دارد. همچنین برای جمع آوری و حذف شیء از مجموعه زباله استفاده می کند.

ویژگی گو

گراف بالا نشان می دهد که Go تقریبا همانند C++ / C کارآمد است، در حالی که سینتکس کد را ساده مانند روبی، پایتون و دیگر زبان ها نگه می دارد. این یک موقعیت برنده برای انسان و پردازنده است! کارایی بالا مانند C++ / C و جاوا هماهنگ سازی فوق العاده موثر و برای کد کردن شرایط سرگرم کننده ای مانند Python و Perl را فراهم می کند. نرم افزار بهینه شده می تواند بر روی سخت افزار ارزان تر و کندتر مانند دستگاه های IOT عمل کند و به طور کلی تاثیر بیشتری بر تجربه کاربر نهایی داشته باشد.

مدل حافظه Go یک قانون جدید در مورد ارسال و دریافت کانال های بافر اضافه می کند تا بطور صریح بیان کند که یک کانال بافر می تواند به عنوان یک سمپاور ساده استفاده شود.

پشتیبانی تست

پشتیبانی تست در کتابخانه استاندارد ساخته شده است. نیازی به وابستگی اضافی وجود ندارد اگر یک فایل با نام thing.go داشته باشید، تست های خود را در فایل دیگری با نام thing_test.go بنویسید و «go  test » را اجرا کنید.

زباله روب

مدیریت حافظه در Go عمدا ساده تر از C و ++C می باشد. اشیاء اختصاص داده شده به صورت پویا درحال جمع آوری زباله هستند.

ابزار های زبان GO

توزیع اصلی Go شامل ابزارهایی برای ساخت ، تست و تجزیه و تحلیل کد است:

  • go build : تنها با استفاده از فایل های منبع خود باینری را ایجاد میکند.
  • go test : برای تست واحد و microbenchmarks استفاده می شود.
  • go fmt : برای قالب بندی کد استفاده میشود.
  • go get : برای بازیابی و نصب بسته های راه دور استفاده می شود.
  • go vet : یک تحلیلگر استاتیک به دنبال خطاهای احتمالی در کد است.
  • go run : یک میانبر برای ساخت و اجرای کد است.
  • go doc : برای نمایش اسناد و یا ارائه آن از طریق HTTP
  • go rename : برای تغییر نام متغیرها، توابع و غیره در type-safe استفاده میشود.
  • go generate : یک روش استاندارد برای فراخوانی ژنراتور کد

همچنین شامل پشتیبانی از پروفایل و اشکال زدایی، ابزار سنجش زمان اجرا (به عنوان مثال، برای ردیابی مکث های زباله )

اکوسیستم ابزارهای شخص ثالث به توزیع استاندارد اضافه شده از جمله gocode که امکان تکمیل خودکار کد را در بسیاری از ویرایشگر های متن فراهم میکند. goimports (توسط عضو تیم Go) که به طور خودکار و در صورت نیاز پکیج را حذف یا اضافه میکند و errcheck که خطاهای کد را شناسایی می کند و ممکن است اشتباهات را نادیده بگیرد. پلاگین هایی برای اضافه کردن پشتیبانی از زبان در چند ویرایشگر متن وجود دارد. چند IDE در دسترس هستند، از جمله LiteIDE و  " cross-platform Go IDE " و GoLand، که ادعا می کند توانمند و  راحت است.

برخی از برنامه های محبوب توسعه یافته در زبان GO

برخی از برنامه های منبع باز در Go عبارتند از:

  • Caddy : وب سرور  HTTP 2 منبع باز با قابلیت HTTPS خودکار
  • CockroachDB : یک پایگاه داده SQL متن باز، مقیاس پذیر و سازگار
  • داکر (Docker) : مجموعه ای از ابزارهای استقرار لینوکس را شامل می شود.
  • Ethereum : پیاده سازی Go-Ethereum , دستگاه بلاکچین ماشین مجازی , Ethereum مجازی برای Cryptocurrency اتر
  • Hugo : یک ژنراتور سایت استاتیک
  • InfluxDB : پایگاه داده منبع باز برای رسیدگی به داده های سری زمانی با دسترسی بالا و الزامات عملکرد بالا
  • InterPlanetary File System : پروتکل آدرس دهی محتوا و نقطه به نقطه مدیا
  • Juju: یک ابزار ارزیابی خدمات توسط Canonical، پکیج های لینوکس اوبونتو.
  • کوبرنتیز (Kubernetes): سیستم مدیریت کانتینر
  • Lightning Network : یک شبکه بیت کوین که برای معاملات سریع Bitcoin است.
  • Mattermost: یک سیستم teamchat است.
  • OpenShift : یک پلت فرم محاسبات ابری که به عنوان یک سرویس توسط Red Hat ارائه شده است.
  • Snappy: یک مدیر پکیج برای Ubuntu Touch توسط Canonical توسعه یافته است.
  • Syncthing: نرم افزار منبع باز کلاینت/سرور هماهنگ سازی فایل است.
  • Terraform : یک ابزار منبع باز برای زیر ساخت چندرسانه ای ابر که توسط HashiCorp ارائه شده است.

دیگر شرکت های قابل توجه و سایت هایی که از GO استفاده کرده اند (به طور کلی همراه با زبان های دیگر، نه منحصرا) عبارتند از :

  • Cacoo: برای رندر صفحات داشبورد کاربر و میکرو سرویس ها با استفاده از Go و gRPC.
  • Chango: یک شرکت تبلیغاتی برنامه ای از سیستم های قیمت گذاری زمان واقعی خود استفاده می کند.
  • Cloud Foundry : یک پلت فرم به عنوان یک سرویس.
  • CloudFlare : برای  Delta-coding proxy Railgun، سرویس DNS توزیع شده خود و همچنین ابزارهای رمزنگاری، ورود به سیستم، پردازش جریان و دسترسی به سایتهای  SPDY استفاده شده است.
  • CoreOS: یک سیستم عامل مبتنی بر لینوکس است که از مخزن Docker و مخزن rkt استفاده می کند.
  • Dropbox: که تعدادی از اجزای حیاتی خود را از پایتون به GO مهاجرت داده است.
  • Ethereum : یک ارز دیجیتال
  • Google: در برای بسیاری از پروژه ها، از جمله شامل سرور دانلود (dl.google.com) استفاده کرده است .
  • Hyperledger Fabric : یک پروژه منبع باز،منحصر به فرد سازمانی است.
  • مانگودی بی (MongoDB) : ابزار برای مدیریت نمونه های MongoDB
  • Netflix: برای دو بخش معماری سرور خود استفاده کرده است.
  • Novartis: برای سیستم موجودی داخلی
  • Nutanix : برای انواع میکرو سرویس در شرکت Cloud OS خود استفاده کرده است.
  • Plug.dj : یک وب سایت تعاملی در رابطه با جریان موسیقی اجتماعی آنلاین است.
  • SendGrid: یک بولدر، خدمات تحویل ایمیل و سرویس مدیریت معاملات مبتنی بر کلرادو.
  • SoundCloud: برای "dozens of systems" استفاده کرده است.
  • Splice: برای کل backend (API و parsers) در پلت فرم همکاری آنلاین موسیقی خود استفاده کرده است.
  • ThoughtWorks: برخی از ابزارها و برنامه های کاربردی برای تحویل مداوم و پیام های فوری (CoyIM).
  • Twitch.tv : برای سیستم چت مبتنی بر IRC (مهاجرت از پایتون).
  • Uber: برای رسیدگی به حجم زیادی از پرسش های مبتنی بر geofence

 

نمونه کدهای GO

نمایش !Hello World

package main

import "fmt"

func main() { fmt.Println("Hello, world") }

برنامه ساده زیر ویژگی های همگرا Go برای اجرای یک برنامه ناهمزمان را نشان می دهد. این دو موضوع  " goroutines " را راه اندازی می کند.

package main

import ( "fmt" "time" )

func readword(ch chan string) { fmt.Println("Type a word, then hit Enter.") var word string fmt.Scanf("%s", &word) ch <- word }

func timeout(t chan bool) { time.Sleep(5 * time.Second) t <- false }

func main() { t := make(chan bool) go timeout(t)

ch := make(chan string) go readword(ch)

select { case word := <-ch: fmt.Println("Received", word) case <-t: fmt.Println("Timeout.") } }

 

آیا این نوشته را دوست داشتید؟