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.
Более подробный журнал выпуска см.Посмотреть исходный текст.