Go 1.12
Вчера Go официально выпустила версию 1.12. В этой статье описаны изменения в Go 1.12.
Вышла официальная версия Go 1.12, и прошло полгода с момента последнего официального выпуска Go 1.11. Как всегда, Go 1.12 поддерживает обещание совместимости и ожидает, что все программы Go будут компилироваться, как и раньше. Основные моменты обновления новой версии: предварительная поддержка TLS 1.3, усиленная поддержка модулей и улучшенная совместимость с macOS и iOS. В новой версии не изменилась спецификация языка.
инструмент
-
go tool vetбольше не поддерживается; - Двоичные пакеты больше не будут поддерживаться в следующей версии;
-
go tool tourБольше не входит в основной бинарный дистрибутив, требует ручной установки; - Go 1.12 добавил поддержку графика использования мутаторов в инструмент трассировки, что может облегчить обнаружение ограниченной производительности GC;
- Go Module дальнейшая поддержка. планируете
Go 1.13режим модуля включен по умолчанию.
когдаGO111MODULEУстановить какon, команда go теперь поддерживает операции с учетом модуля за пределами каталога модуля, при условии, что эти операции не требуют разрешения путей импорта относительно текущего каталога или явного редактирования.go.modдокумент. Такие какgo get,go listиgo mod downloadкоманды, как в модуле с начальным пустым требованием.
Команду go для загрузки и распаковки модулей теперь можно безопасно вызывать одновременно. Кэш модуля (GOPATH/pkg/mod) должен находиться в файловой системе, поддерживающей блокировку файлов.
go.modДиректива go в файле теперь указывает языковую версию, используемую файлами в этом модуле. Если существующей версии нет, будет установлена текущая версия (перейдите к 1.12). Если директива go модуля указывает более новую версию, чем используемая цепочка инструментов, команда go попытается собрать пакет, и несоответствие будет зарегистрировано только в случае сбоя этой сборки.
Когда импорт не может быть разрешен с использованием активного модуля, команда go теперь будет пытаться использовать модуль, указанный в директиве замены основного модуля, прежде чем запрашивать кэш модуля и общие сетевые источники. Если подходящая замена найдена, но в директиве replace не указана версия, команда go использует ноль.time.Time(Напримерv0.0.0-00010101000000-000000000000) производная псевдоверсия.
Runtime
- Улучшена производительность очистки, когда активно большое количество куч, что сокращает задержки выделения памяти после сборки мусора и может лучше высвобождать память обратно в операционную систему;
- Таймер среды выполнения и код крайнего срока будут работать лучше по мере увеличения числа ЦП. Это повышает производительность операций, связанных со сроками подключения к сети;
- Исправления, связанные с выделением больших объемов кучи, для повышения точности профилей памяти;
Связанные с платформой
Для FreeBSD и macOS Go 1.12 является последним выпуском, поддерживающим FreeBSD 10.x и macOS 10.10 Yosemite. Для следующего выпуска Go 1.13 потребуется FreeBSD 11.2+ или FreeBSD 12.0+, а для macOS — macOS 10.11 El Capitan или новее.
Основная библиотека
- TLS 1.3
Go 1.12, указанный в RFC 8446crypto/tlsВ пакет добавлена необязательная поддержка TLS 1.3. путем изменения значенияtls13 = 1добавить вGODEBUGпеременная среды, чтобы включить его. это будет вGo 1.13включен по умолчанию.
- Небольшие изменения в библиотеке. Как всегда, стремление сохранить
Go 1В библиотеку внесены различные мелкие изменения и обновления для совместимости.
резюме
Управление пакетами в GO — это всегда болезнь, от механизма Vendor, представленного в Go 1.5, до официального инструментаdep,go modulesМы познакомились с выпуском Go 1.11, который является официально пропагандируемым механизмом управления пакетами и даже проектами, который больше не требует существования GOPATH. Что касается текущей версии Go 1.12, язык Go приложил немало усилий, как говорится в официальном блоге Go:
2018 was a great year for the Golang ecosystem, with package management as one of our major focuses.
2018 год был важным годом для экосистемы Go, и управление упаковкой было одним из наших основных направлений. В феврале 2018 года в сообществе обсуждалась интеграция управления пакетами непосредственно в цепочку инструментов Go, а в августе в Go 1.11 была доступна первая примерная реализация этой функции под названиемgo modules. переехал вgo modulesЭто будет самое далеко идущее изменение в экосистеме GO. Конвертируйте всю экосистему: код, пользователя, инструмент и т. д. При переходе с GoPath на модули придется работать во многих разных областях. Модульная система поможет нам обеспечить лучшую аутентификацию и скорость сборки для экосистемы GO.
По сравнению с механизмами godep и вендора,go modulesУже очень продвинутый, Go 1.12 был выпущен, рассмотрите возможность постепенного перехода на модули go.
Более подробный журнал выпуска см.Посмотреть исходный текст.