Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Новости, события
Выпущен Go 1.17
Полные примечания к выпуску
Улучшения компилятора, дающие прирост производительности ~ 5%
64-битная поддержка ARM в Windows.
Урезанные графы модулей
если модуль указывает go 1.17 или выше, граф модулей включает только непосредственные зависимости других модулей go 1.17, но не их полные транзитивные зависимости.
unsafe.Add
unsafe.Add(ptr, len) добавляет len к ptr и возвращает обновленный указатель unsafe.Pointer(uintptr(ptr) + uintptr(len)).
Преобразования из среза в указатель на массив
выражение 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
https://awesome-go.com/
https://github.com/guardrailsio/awesome-golang-security
https://github.com/Binject/awesome-go-security
https://gist.github.com/hbt/d6ab942b882d5b94f331c5257076d05e
https://github.com/avelino/awesome-go
Материалы для обучения
Материалы учебных курсов по Go
Статьи
Как работает len()
Создание оператора Kubernetes
Устранение распространенных проблем с CORS и JavaScript (в Go REST API)
Шесть инструментов командной строки
Повесть о двух копиях
Общие анти-шаблоны в веб-приложениях
Обработка ошибок отложенных функций
Запуск приложения на голом железе
map[string]interface{} - статья про не типизированную карту
Обучение на примерах: создание бота для Discord
Go 1.17 очень хорошо работает с C # в старой доброй игре Computer Language Benchmarks Game
Error stack traces in Go with x/xerror
Недостаточная полезность sync.Once - фантастический пример того, почему вы можете использовать это для очистки кода
Использование Go Generics
Создавайте масштабируемые приложения с помощью AWS Lambda - прямой обзор того, как и почему следует рассматривать бессерверный подход для приложений Go.
Brooks, Wirth and Go - отличная статья о двух гигантах в индустрии программного обеспечения
Как моделировать данные JSON в приложении с помощью CockroachDB
Как выпустить игру для Steam на GO
Советы по написанию JSON REST API в Go
Напишите инструмент статического анализа кода для определения состояния гонки
Автоматизация JIRA
Анализ теста по Go с PHDays
Опыт применения GitHub Actions для создания CI/CD с бесплатным хостингом на Heroku
GoLand 2021.2: Улучшенная поддержка Go-модулей, новые возможности запуска gofmt, поддержка Go 1.17
Как сделать конфигурационные файлы версионируемыми с инструментами Kubernetes
Real-time мониторинг тормозящих запросов PostgreSQL своими руками за полчаса
Go: как программа восстанавливается после паники?
Установка Golang в WSL (WSL 2) с помощью Visual Studio Code
Register-based calling convention, GO?
Как сделать alter table в высоконагруженной таблице
Go: объектный файл и релокация
Как в восемь раз уменьшить количество DNS-запросов в Go
Я сделал StackOverflow из IT-чатов Telegram
Эволюция Docker. Часть 2.1
Эволюция Docker. Часть 2.2
Эволюция Docker. Часть 2.3
Go: стоит ли использовать указатели вместо копий структуры?
Как работать с Tarantool на Golang вместо Lua
История платформы Highload.Fun для соревнований в оптимизации кода
Функциональные опции в Go: реализация шаблона опций в Golang
Прагматичные Unit тесты на Golang
Инструменты
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