Випущено мову програмування Go 1.16
Представлений реліз мови програмування Go 1.16, який розробляється компанією Google за участю спільноти як гібридне рішення, що поєднує в собі високу продуктивність компільованих мов з такими перевагами скриптових мов, як простота написання коду, швидкість розробки і захист від помилок. Код проекту поширюється під ліцензією BSD.
Синтаксис Go заснований на звичайних елементах мови C з окремими запозиченнями від мови Python. Мова досить лаконічний, але код легко читається і сприймається. Код Go компілюється в окремі двійкові виконувані файли, які запускаються нативно без використання віртуальної машини (профілювання, налагодження та інші підсистеми виявлення проблем виконання інтегровані як компоненти середовища виконання) для досягнення продуктивності, порівнянної з програмами C.
Проект спочатку розробляється з прицілом на багатопотокове програмування і ефективну роботу над багатоядерними системами, в тому числі надає інструменти операторного рівня для організації паралельних обчислень і взаємодії між паралельними методами. Мова також забезпечує вбудований захист від виходу за межі дозволених областей виділених блоків пам'яті і надає можливість використання сміттєзбірника.
Основні нововведення, введені в реліз Go 1.16:
- Доданий пакет embed, який надає інструменти для вбудовування в програму довільних файлів і каталогів. Щоб вказати файли, які будуть вбудовані під час компіляції, надається нова директива "//go:embed". Наприклад, вказівка коментаря в коді "//go:embed test.txt" і оголошення наступної змінної "var f embed". FS" призведе до вбудовування тестового.txt файлу і можливості доступу до нього через ручку "f". Аналогічним чином можна вбудувати необхідні файли з ресурсами або окремими значеннями певного типу, наприклад, для отримання рядкової змінної "s" з файлу версії.txt можна вказати:
import _ "embed" //go:embed version.txt var s string print(s)
- За замовчуванням тепер потрібна нова модульна система з інтегрованою підтримкою версій, яка замінює управління залежностями на основі GOPATH. Змінна середовища GO111MODULE тепер за замовчуванням встановлена на "увімкнено", і режим модуля використовується незалежно від наявності файлу go.mod в робочому або батьківському каталозі. У новому режимі команди збірки, такі як "go build" і "go test", не змінюють вміст go.mod і go.sum, а команда "go install" обробляє аргументи, специфічні для версії ( "go install example.com/cmd@v1.0.0"). Щоб повернути стару поведінку, змініть GO111MODULE на "авто". Зазначається, що 96% розробників вже перейшли на нову систему модулів.
- Лінкер оптимізовано. Для більших проектів макет тепер на 20-25% швидше і вимагає на 5-15% менше пам'яті.
- Компілятор додає підтримку вбудованого розгортання функцій зі скороченим визначенням циклів "для", значень методів та конструкцій "перемикача типів".
- Додана підтримка систем Apple, оснащених новим ARM-чіпом Apple M1. Додано порти netbsd/arm64 та openbsd/mips64 з підтримкою NetBSD на 64-бітних ARM та OpenBSD у системах MIPS64. Порт linux/riscv64 додає підтримку режиму cgo та "-buildmode=pie".
- Підтримка режиму компіляції x87 (GO386=387) припинена. Підтримка процесорів без інструкцій SSE2 тепер доступна через програмний режим "GO386=softfloat".