گو (زبان برنامه‌نویسی)
گو یک زبان برنامه‌نویسی ترجمه‌شده و دارای زباله جمع‌کن و همروند است که در شرکت گوگل و توسط رابرت گریسیمر، راب پایک و کن تامپسون توسعه داده می‌شود.
این زبان در نوامبر ۲۰۰۹ (برابر ) معرفی شد و در حال حاضر در چند سامانهٔ اجرایی گوگل استفاده می‌شود. مترجم گو از لینوکس، مک او اس، ویندوز و انواع سیستم‌های عامل بی‌اس‌دی مانند FreeBSD پشتیبانی می‌کند. از لحاظ معماری پردازنده نیز، معماری ایکس۸۶، معماری ایکس۶۴، معماری آرم و معماری POWER که مخصوص به شرکت آی‌بی‌ام است، توسط مترجم گو پشتیبانی می‌شوند.
«go» به عنوان یک آزمایش توسط مهندسان گوگل رابرت گریسیمر، راب پایک و کن تامپسون توسعه پیدا کرده است. این زبان برنامه‌نویسی به شیوه‌ای طراحی شده است که ضمن برطرف کردن انتقادهای رایج از دیگر زبان‌ها، ویژگی‌های مثبت آنها را حفظ کند. زبان جدید شامل ویژگی‌های زیر بود:
«گو» در سال ۲۰۰۷ (به شمسی: ۱۳۸۶) توسط «شرکت گوگل» با هدف افزایش بهره‌وری برنامه‌نویسی در محیط چندهسته‌ای، رایانه‌های شبکه‌ای و کدبیس‌های بزرگ طراحی شد.
«گو» در نوامبر ۲۰۰۹ (به شمسی: آذر ۱۳۸۸) به صورت عمومی معرفی شد و نسخه [27] و نسخه ۱.۰ آن در مارس ۲۰۱۲ (به شمسی: فروردین ۱۳۹۱) منتشر شد. «گو» به طور گسترده ای در محصولات گوگل و در بسیاری از سازمان های دیگر و پروژه های منبع باز استفاده می شود.
در آوریل ۲۰۱۸ ، لوگوی فعلی جایگزین لوگوی سابق آن شد با این حال، شگون‌نما آن که موش‌های کیسه‌دار است، دست نخورده باقی ماند. اهداف ایجاد زبان گو شامل موارد زیر است:
“go” به‌طور قابل توجهی در سنت C است، اما باعث تغییرات بسیاری می‌شود که به منظور شفافیت، سادگی و ایمنی ایجاد می‌شود:
یک روش نحوی و محرک پذیرش الگوهای رایج در زبان‌های پویا: رویکردهای متمایز به مشکلات خاص:
در زبان گو، ارث‌بری نوع‌ها وجود ندارد. در این زبان، می‌توان برای هر نوع داده‌ای، حتی برای نوع‌های داخلی، مثل اعداد صحیح فاقد بسته‌بندی، تابع عضو تعریف کرد، و این عمل محدود به ساخت‌ها (رده‌ها) نمی‌شود.
در زبان گو از رابط‌ها می‌توان برای تعریف رفتار یک شی استفاده کرد. هر رابط مجموعه‌ای از تعریف توابع است، و هر نوعی که توابع این رابط را داشته باشد، این رابط را پیاده‌سازی کرده‌است.
در نمونه زیر، یک رابط تعریف شده‌است که یک تابع به نام codice_4 و نوع خروجی codice_5 مشخص کرده‌است. هر نوعی که این تابع را پیاده‌سازی کند، در واقع این رابط را پیاده‌سازی کرده‌است. به عنوان نمونه، هم codice_6 و هم codice_7 این چنین هستند. type Abser interface {
type MyFloat float64
func (f MyFloat) Abs() float64 {
type Vertex struct {
func (v Vertex) Abs() float64 {
func main() {
گوروتین که برگرفته از نام می‌باشد، تابعی است که به صورت همروند با بقیه گوروتین‌ها در فضای حافظه یکسان اجرا می‌شود. گوروتین‌ها معادل با ریسمان‌های سیستم‌عامل نیستند، بلکه چندین گوروتین بین چندین ریسمان سیستم‌عامل تسهیم می‌شوند.
برای ایجاد یک گوروتین، قبل از فراخوانی تابع، عبارت codice_8 را استفاده می‌کنیم. در نمونه زیر، یک گوروتین به‌صورت همروند با گوروتین فعلی ایجاد و اجرا می‌شود: go list.Sort() // run list.Sort concurrently; don't wait for it. گوروتین‌ها برای تبادل داده از کانال‌ها استفاده می‌کنند. در نمونه زیر، یک کانال به نام codice_9 ایجاد می‌شود که برای مشخص کردن تکمیل اجرای گوروتین داخلی استفاده می‌شود: c := make(chan int) // Allocate a channel. // Start the sort in a goroutine; when it completes, signal on the channel. go func() { doSomethingForAWhile() برنامه Hello World را در گو پیاده‌سازی می‌کند:
package main
import "fmt"
func main() {
مثال زیر چگونگی نوشتن برنامه‌ای مشابه فرمان echo یونیکس را در گو نشان می‌دهد:
package main
import (
var omitNewline = flag.Bool("n", false, "don't print final newline")
const (
func main() {
منتقدان زبان گو می‌گویند:
در روز ۱۰ نوامبر ۲۰۰۹، روز انتشار عمومی زبان، فرانسیس مک کیب، توسعه دهنده زبان برنامه‌نویسی !Go درخواست تغییر نام از زبان گوگل را برای جلوگیری از سردرگمی با زبان خود، که ۱۰ سال در حال توسعه آن است، کرد.
در ۱۲ اکتبر ۲۰۱۰، این مسئله توسط راس ککس (rsc@) توسعه دهنده گوگل با وضعیت سفارشی «متأسفانه» همراه با توضیح زیر بسته شد:
«بسیاری از محصولات و خدمات محاسباتی از نام Go استفاده می‌کنند. در ۱۱ ماه پس از انتشار ما، این شباهت نام کمترین میزان سردرگمی را به‌وجود آورده‌است.»