Golang-дайджест № 8 (1 – 31 августа  2021)

image-loader.svg

Новости, события

  • Выпущен Go 1.17

    • Полные примечания к выпуску

    • Улучшения компилятора, дающие прирост производительности ~ 5%

    • 64-битная поддержка ARM в Windows.

    • Урезанные графы модулей

      • если модуль указывает go 1.17 или выше, граф модулей включает только непосредственные зависимости других модулей go 1.17, но не их полные транзитивные зависимости.

    • unsafe.Add

    • Преобразования из среза в указатель на массив

      • выражение s типа []T теперь может быть преобразовано в тип указателя массива *[N]T. Если a является результатом такого преобразования, то соответствующие индексы, находящиеся в диапазоне, относятся к одним и тем же базовым элементам: &a[i] == &s[i] для 0 <= i < N. Преобразование вызывает панику, если len(s) меньше N.

    • unsafe.Slice

      • для выражения ptr типа *T, unsafe.Slice (ptr, len) возвращает срез типа []T, базовый массив которого начинается с ptr, а длина и емкость равны len.

    • Комментарии к устаревшим модулям

      • Авторы модуля могут объявить модуль устаревшим, добавив комментарий // Deprecated: в go.mod, а затем пометив новую версию. go get теперь выводит предупреждение, если модуль, необходимый для сборки пакетов, указанных в командной строке, устарел. go list -m -u печатает устаревшие для всех зависимостей (используйте -f или -json, чтобы показать полное сообщение). Команда go считает разные основные версии отдельными модулями, поэтому этот механизм можно использовать, например, для предоставления пользователям инструкций по миграции для новой основной версии.

    • go get

      • Флаг go get -insecure устарел и был удален. Чтобы разрешить использование небезопасных схем при получении зависимостей, используйте переменную среды GOINSECURE. Флаг -insecure также обходит проверку суммы модуля, используйте GOPRIVATE или GONOSUMDB, если вам нужна эта функция.

      • go get выводит предупреждение об устаревании при установке команд вне основного модуля (без флага -d). go install cmd@version следует использовать вместо этого для установки команды определенной версии, используя суффикс типа @latest или @v1.2.3. В Go 1.18 всегда будет включен флаг -d, а go get будет использоваться только для изменения зависимостей в go.mod.

    • Cgo

      • Пакет runtime/cgo теперь предоставляет новую возможность, которая позволяет преобразовывать любые значения Go в безопасное представление, которое можно использовать для безопасной передачи значений между C и Go (runtime/cgo.Handle).

    • TLS строгий ALPN

      • Когда установлен Config.NextProtos, серверы теперь обеспечивают перекрытие между настроенными протоколами и протоколами ALPN, объявленными клиентом, если таковые имеются. Если нет взаимно поддерживаемого протокола, соединение закрывается с предупреждением no_application_protocol, как того требует RFC 7301. Это помогает смягчить межпротокольную атаку ALPACA.

      • В качестве исключения, когда значение «h2» включено в файл Config.NextProtos сервера, клиентам HTTP/1.1 будет разрешено подключаться, как если бы они не поддерживали ALPN.

    • gofmt

      • gofmt (и go fmt) теперь синхронизирует строки //go: build со строками // +build. Если файл содержит только строки // +build, они будут перемещены в соответствующее место в файле, и будут добавлены соответствующие строки //go: build. В противном случае строки // +build будут перезаписаны на основе любых существующих строк //go: build.

    • go run

      • go run теперь принимает аргументы с суффиксами версии (например, go run example.com/cmd@v1.0.0). Это приводит к тому, что go run создает и запускает пакеты в режиме с поддержкой модулей, игнорируя файл go.mod в текущем каталоге или любом родительском каталоге, если он есть. Это полезно для запуска исполняемых файлов без их установки или без изменения зависимостей текущего модуля.

    • vendor

      • Если в основном модуле указано go 1.17 или выше, go mod vendor теперь аннотирует vendor/modules.txt версией go, указанную каждым поставляемым модулем, в его собственном файле go.mod. Аннотированная версия используется при сборке пакетов модуля из исходного кода поставщика.

      • Если основной модуль указывает go 1.17 или выше, go mod vendor теперь не включает файлы go.mod и go.sum для зависимостей поставщика, которые в противном случае могут помешать команде go определить правильный корень модуля при вызове в дереве поставщиков.

  • Выпущена Gitea v1.15.0 популярной системы git forge

  • Amazon представила MemoryDB для Redis, управляемую службу, совместимую с Redis, предназначенную для первичного использования баз данных.

Awesome

Материалы для обучения

Статьи

Инструменты

  • Entity Framework — Ent v0.9.0

  • Библиотека проверка безопасности Golang — gosec v2.8.1

  • Библиотека для конфигурации на основе графов — virgo v0.0.1

  • Библиотека для генерации кодов TOTP / HOTP — otpgen v1.0.0

  • Расширенная поддержка стилей и цветов ANSI для терминальных приложений — termenv v0.9.0

  • Инструмент для переноса C в Go — cxgo v0.3.0

  • Библиотека cloudflare api — cloudflare-go v0.21.0

  • Утилита маршрутизации MIDI с расширенным интерфейсом OSC — Pigiron

  • Инструмент для обновления структур данных из командной строки — dasel v1.20.0

  • Инструмент для преобразования данных, моделирования данных, конвейеров и управления качеством данных — optimus v0.0.2

  • Инструмент для передачи файлов с одного компьютера на другой — croc v9.3.0

  • Библиотека индексирования текста — Bleve v2.1.0

  • Инструмент генерирует безопасный тип Go из SQL — sqlc v1.9.0

  • Почтовый сервер SMTP — Maddy v0.5.0

  • Реализация Go gRPC (HTTP / 2-based RPC) — grpc-go v1.40.0

  • Клиент для GitHub API v3 — go-github v38.1.0

  • Драйвер MongoDB Go 1.7.1

  • Комплексная аутентификация для веб-проектов Go authboss v3.2.0

  • Библиотека Premier ACME — Acmez v1.0

  • Крошечная реализация Git — ReGit

  • Сервер аутентификации LDAP — GLAuth v2.0

  • Официальный клиент GitHub CLI — GitHub CLI v2.0

  • Распределенная база данных, построенная на SQLite — rqlite v6.2.0

  • API клиент Spotify — Spotify v2.0

  • Инструмент слайд-шоу на основе терминала — slides v0.5.0

  • Фреймворк распределенных систем — micro v3.6.0

  • Клиент для PostgreSQL, MySQL и SQLite — bun v1.0.0

  • HTTP-маршрутизатор — treemux v0.7.3

  • Фреймворк для тестирования — testza v0.2.7

  • Библиотека кодирования base64 — base64 v0.1.2

  • Example code for Go generics

  • Платформа для создания и управления сетями — netmaker v0.7.3

  • OpenID Connect (OIDC) HTTP Middleware — go-oidc-middleware v0.0.11

Подкасты

GenericTalks

Go Tim‪e‬

Сообщества

Вопросы по языку на русскоязычном StackOverflow

Страница Go на stackoverflow

Информация о митапах

Форум в группах Google

https://t.me/vseins_tech

© Habrahabr.ru