Что нового в Go версии 1.12

Архитектура Go

Go 1.12

Вчера Go официально выпустила версию 1.12. В этой статье описаны изменения в Go 1.12.

Вышла официальная версия Go 1.12, и прошло полгода с момента последнего официального выпуска Go 1.11. Как всегда, Go 1.12 поддерживает обещание совместимости и ожидает, что все программы Go будут компилироваться, как и раньше. Основные моменты обновления новой версии: предварительная поддержка TLS 1.3, усиленная поддержка модулей и улучшенная совместимость с macOS и iOS. В новой версии не изменилась спецификация языка.

Golang
Golang

инструмент

  • 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.

Более подробный журнал выпуска см.Посмотреть исходный текст.

Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер

微信公众号

Ссылаться на

  1. Go 1.12 Release Notes
  2. Go Modules in 2019