Golang-дайджест № 8 (1 – 31 августа 2021)
Новости, события
Выпущен 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 Time
Сообщества
Вопросы по языку на русскоязычном StackOverflow
Страница Go на stackoverflow
Информация о митапах
Форум в группах Google
https://t.me/vseins_tech