Долгожданный язык программирования Go 1.18, наконец, был запущен в качестве рабочей версии, в которой представлены его новаторские возможности дженериков. Это самое значительное изменение в языке программирования Go с момента первого запуска Go 1.0 в 2012 году. Go 1.18 можно загрузить с сайта go.dev с 15 марта.
Универсальные функции были самой востребованной функцией программистов Go, предлагая поддержку универсального кода с использованием параметризованных типов. Планируется, что последующие выпуски обеспечат дальнейшую поддержку более сложных универсальных вариантов использования. Пользователи могут получить доступ к информации об этой функции через учебник по дженерикам и примечания к выпуску .
Языковой сервер Go, gopls, вместе с расширением Visual Studio Code Go теперь поддерживают дженерики. Инструкции по установке gopls с дженериками см. в документации.
Производственный выпуск Go 1.18 следует за стадиями бета-тестирования и релиз-кандидата. Первоначальный выпуск ожидался в феврале 2022 года, но был отложен до середины марта. Go 1.18 Beta 1, дебютировавшая 14 декабря, была передовым предварительным выпуском разработанного Google языка с открытым исходным кодом для поддержки универсального кода с использованием параметризованных типов. Эта бета-версия также была самой загружаемой бета-версией Go за всю историю: количество загрузок в два раза больше, чем у любой предыдущей бета-версии.
Универсальное программирование — это усовершенствование, позволяющее представлять функции и структуры данных в универсальной форме с выделением типов. Это облегчает совместное использование кода и упрощает создание программ.
Команда Go посоветовала проявлять осторожность при подходе к новым возможностям дженериков, так как новые ошибки могут появиться с любой существенной новой функцией. Кроме того, поддержка конкретных малозаметных случаев, таких как определенные виды рекурсивных универсальных типов, отложена до будущих выпусков.
Несмотря на это предупреждение, первые пользователи остались довольны новой функцией. Краткое руководство по началу работы с дженериками опубликовано здесь . Хотя у Go были типы интерфейсов, форма универсального программирования, в нем отсутствовали определенные аспекты, которые разработчики Go хотели от универсальных шаблонов, как сообщалось в сообщении в блоге за июль 2019 года. Например, сторонники дженериков Go искали такие функции, как Reverse, не заботясь о типе элемента среза.
В выпущенных примечаниях к Go 1.18 также подчеркиваются другие его ключевые особенности, такие как:
- Встроенная поддержка написания тестов на основе фаззинга для выявления входных данных, вызывающих сбой программы или возврат неверных ответов. Эта функция является экспериментальной в Go 1.18.
- Режим рабочего пространства Go, позволяющий разработчикам работать с несколькими модулями Go одновременно, что необходимо для более масштабных проектов.
- Усовершенствованная команда go version -m, которая теперь записывает сведения о сборке, такие как флаги компилятора.
- Переменная среды GOAMD64, позволяющая пользователям выбирать из четырех версий архитектуры AMD64.
- Улучшение производительности ЦП на Apple M1, ARM64 и PowerPC64 на целых 20 % связано с расширением соглашения о вызовах регистров ABI Go 1.17 на эти архитектуры.
- Порты Windows/Arm и Windows/Arm64 теперь поддерживают некооперативное упреждение, что делает эту возможность доступной для всех четырех портов Windows и потенциально устраняет тонкие ошибки, возникающие при вызове функций Win32, которые блокируются в течение длительного времени.
- Более предсказуемые накладные расходы на сборку мусора, когда источники работы сборщика мусора, не связанные с кучей, значительны, благодаря включению этих источников при определении частоты запусков сборки мусора.
Go 1.17 был выпущен в августе. Go наиболее известен своим использованием в разработке системы контейнеров Docker и был разработан как простой, легкий в освоении язык программирования с надежной поддержкой параллелизма. Для разработчиков, которые хотят изучить решения no-code, такие как платформа AppMaster, для создания веб-приложений, мобильных и серверных приложений, это может помочь ускорить разработку приложений и сократить расходы, устраняя при этом технический долг.