ارسال شده توسط انتشار زبان برنامه نویسی برو 1.15که توسط گوگل با مشارکت جامعه به عنوان یک راه حل ترکیبی که عملکرد بالای زبان های کامپایل شده را با مزایای زبان های اسکریپت نویسی مانند سهولت در نوشتن کد، سرعت توسعه و محافظت از خطا ترکیب می کند، در حال توسعه است. کد پروژه توزیع شده توسط تحت مجوز BSD
سینتکس Go بر اساس عناصر آشنای زبان C با برخی وامگیریهایی از زبان پایتون است. زبان کاملاً مختصر است، اما کد به راحتی قابل خواندن و درک است. کد Go در فایل های اجرایی باینری مستقل که به صورت بومی و بدون استفاده از ماشین مجازی اجرا می شوند کامپایل می شود (پروفایل، اشکال زدایی و سایر زیرسیستم های تشخیص مشکل در زمان اجرا به صورت ادغام شده اند. اجزای زمان اجرا) که به شما امکان می دهد عملکردی قابل مقایسه با برنامه های C داشته باشید.
این پروژه در ابتدا با توجه به برنامه نویسی چند رشته ای و عملیات کارآمد بر روی سیستم های چند هسته ای، از جمله ارائه ابزارهای سطح اپراتور برای سازماندهی محاسبات موازی و تعامل بین روش های موازی اجرا شده، توسعه یافته است. این زبان همچنین محافظت داخلی در برابر بلوک های حافظه بیش از حد تخصیص داده شده را فراهم می کند و امکان استفاده از جمع کننده زباله را فراهم می کند.
کار لینکر هم در افزایش سرعت کار و کاهش مصرف حافظه و هم در جهت ساده سازی نگهداری کد بهبود چشمگیری داشته است. هنگامی که بر روی سیستم عامل هایی با استفاده از فرمت فایل اجرایی ELF (Linux، FreeBSD، NetBSD، OpenBSD، Dragonfly، Solaris) آزمایش شد، یک مجموعه معمولی از برنامه های بزرگ Go 20٪ سریعتر ساخته شد و مصرف حافظه به طور متوسط 30٪ کاهش یافت. افزایش بهره وری با تغییر فرمت فایل شی جدید و بازنگری مراحل داخلی برای افزایش سطح موازی کار امکان پذیر شد. لینک کننده بومی اکنون به طور پیش فرض در سیستم های linux/amd64 و linux/arm64 در "-buildmode=pie" استفاده می شود، که دیگر نیازی به استفاده از پیوند C ندارد.
در زمان اجرا، توزیع اشیاء کوچک در سیستمهایی با تعداد هستههای CPU بسیار بهبود یافته و تأخیر کاهش یافته است. در صورت خرابی، مقادیر با انواع عددی و رشته ای به جای نشان دادن آدرس نمایش داده می شود. هنگام ارسال سیگنال های SIGSEGV، SIGBUS و SIGFPE به برنامه Go، در غیاب OS/signal.Notify handler، برنامه با خروجی stack trace خارج می شود (قبلاً این رفتار غیرقابل پیش بینی بود).
کامپایلر برای کاهش اندازه فایلهای اجرایی تولید شده بهطور متوسط 5 درصد بهینهسازی شده است، زیرا از گنجاندن برخی ابردادهها برای جمعآوری زباله و تمیز کردن تهاجمیتر ابردادههای استفاده نشده جلوگیری میکند.
پرچم "-Spectre" به کامپایلر و اسمبلر اضافه شده است تا محافظت در برابر حملات کلاس Spectre را فعال کند (برای اکثر برنامه ها این مورد نیاز نیست، فعال کردن گزینه فقط برای آنها قابل توجیه است. برخی موارد بسیار خاص).
در گواهیهای X.509، قسمت CommonName منسوخ شده است، که اگر فیلد نامهای جایگزین موضوع وجود نداشته باشد، دیگر به عنوان نام میزبان تلقی نمیشود.
دستور "go" در متغیر محیطی GOPROXY اکنون می تواند چندین پراکسی را لیست کند که با کاما یا "|" از هم جدا شده اند. اگر اولین پروکسی در لیست خطای 404 یا 410 را برگرداند، سعی می شود از طریق پراکسی دوم و غیره تماس بگیرید.
اگر "x" یک نوع عدد صحیح به غیر از Rune یا Byte باشد، ابزار vet یک هشدار در مورد تلاش برای تبدیل از رشته(x) اضافه کرده است.
پرچم "-gnu" به ابزار objdump اضافه شده است تا از دستور اسمبلر گنو پشتیبانی کند.
بسته جدید اضافه شد زمان / tzdata، که به شما امکان می دهد یک پایگاه داده را با داده های منطقه زمانی در برنامه ادغام کنید.
از متون منبع و مستندات حذف شده عبارتهای whitelist/blacklist و master/slave که اکنون با "Allowlist"، "Blocklist"، "process"، "pty"، "proc" و "control" جایگزین شدهاند.
بخش بزرگی از بهبودهای جزئی در کتابخانه استاندارد انجام شده است.
اضافه شدن پشتیبانی از OpenBSD 6.7 در حالت های GOARCH=arm و GOARCH=arm64 (قبلا فقط GOARCH=386 و GOARCH=amd64 پشتیبانی می شد).
توسعه پلتفرم 64 بیتی RISC-V (GOOS=linux، GOARCH=riscv64) ادامه یافت.
برای سیستمهای 32 بیتی x86، نسخه بعدی حداقل سیستم مورد نیاز را افزایش میدهد - فقط پردازندههای دارای SSE2 همچنان پشتیبانی میشوند. برای ساخت در حالت GOARCH=386 حداقل به یک Intel Pentium 4 (منتشر شده در سال 2000) یا یک AMD Opteron/Athlon 64 (منتشر شده در سال 2003) نیاز دارید.