![](https://habrastorage.org/getpro/habr/upload_files/e05/68d/a47/e0568da479caa746792ab1d49abfae87.jpg)
Свежая подборка новостей и материалов
Интересное в этом выпуске
Веб-браузер
Мониторинг почтовых служб
Сканер уязвимостей
Зашифрованная файловая система
Приятного чтения!
Материалы для обучения
Руководство для начинающих по разумным абстракциям с использованием Golang
Go-patterns (паттерны проектирования с примерами на Golang)
Новости, события
Модули включены по умолчанию в Go 1.16 – теперь go-команда по умолчанию создает пакеты в режиме с поддержкой модулей
Профилирование блоков в Go – контролирует долю событий блокировки горутин
Generic – предложение добавить дженерики принято
Embed – новый пакет embed обеспечивает доступ к файлам, встроенным в программу во время компиляции, с помощью новой директивы //go:embed
Unicode – пакет unicode и связанная с ним поддержка во всей системе были обновлены с Unicode 12.0.0 до Unicode 13.0.0, что добавляет 5930 новых символов, включая 4 новых скрипта и 55 новых эмодзи
Предложения по улучшению языка
https://github.com/golang/go/issues/44221 - encoding/csv: Добавить возможность получения номера строки записи
Предложение предлагает новый метод:
func (r *Reader) Line() int
https://github.com/golang/go/issues/44253 Предложение добавить в дженерики тип и размер массива
type Array8[T any] interface { type [8]T } type ArraysOfSomeSizes[T any] interface { type [2]T, [4]T, [8]T, [16]T }
предложение предлагает следующий синтаксис для выражения этой идеи:
type Array[T any] interface {type […]T}
https://github.com/golang/go/issues/36460 - cmd/go: Отложенная загрузка модуля
https://github.com/golang/go/issues/44551 Предложение добавить поддержку тестирования фаззинга
func FuzzMarshalFoo(f *testing.F) { // Seed the initial corpus f.Add("cat", big.NewInt(1341)) f.Add("!mouse", big.NewInt(0)) // Run the fuzz test f.Fuzz(func(t *testing.T, a string, num *big.Int) { t.Parallel() // seed corpus tests can run in parallel if num.Sign() <= 0 { t.Skip() // only test positive numbers } val, err := MarshalFoo(a, num) if err != nil { t.Skip() } if val == nil { t.Fatal("MarshalFoo: val == nil, err == nil") } a2, num2, err := UnmarshalFoo(val) if err != nil { t.Fatalf("failed to unmarshal valid Foo: %v", err) } if a2 == nil || num2 == nil { t.Error("UnmarshalFoo: a==nil, num==nil, err==nil") } if a2 != a || !num2.Equal(num) { t.Error("UnmarshalFoo does not match the provided input") } }) }
https://github.com/golang/go/issues/44412 Предложение добавить Time.UnixMilli и Time.UnixMicro
// UnixMilli returns the local Time corresponding to the given Unix time, // msec milliseconds since January 1, 1970 UTC. func UnixMilli(msec int64) Time { if msec%1e3 < 0 { return unixTime(msec/1e3-1, int32((msec%1e3)1e6)+1e9) } return unixTime(msec/1e3, int32((msec%1e3)1e6)) } // UnixMicro returns the local Time corresponding to the given Unix time, // usec milliseconds since January 1, 1970 UTC. func UnixMicro(usec int64) Time { if usec%1e6 < 0 { return unixTime(usec/1e6-1, int32((usec%1e6)1e3)+1e9) } return unixTime(usec/1e6, int32((usec%1e6)1e3)) }
Статьи
Отправка и подделка писем с помощью пользовательских шаблонов в Golang
Создание Swagger и пользовательского интерфейса SwaggerUI для фреймворка Echo
Создаем бессерверное приложение с помощью Azure Functions и Go
Популярные задачи для собеседований бэкенд-разработчиков на Go и их решения
Инструменты
Инструмент непрерывной доставки GitOps для Kubernetes Argo CD
Сканирование для различных протоколов TCP, DNS, HTTP, File на основе шаблонов Nuclei – сканер уязвимостей
Плагин для Terraform, который позволяет управлять полным жизненным циклом ресурсов AWS. Этот провайдер поддерживается внутри группы HashiCorp AWS Provider Terraform
Высокопроизводительная библиотека по работе с json Замена "encoding / json"
Инструмент обнаружения поддоменов. Обнаруживает поддомены для веб-сайтов с помощью пассивных онлайн-источников. Он имеет простую модульную архитектуру и оптимизирован по скорости Subfinder
Кросс-платформенное прокси сервер/клиент с шифрованием Brook
Настраиваемый механизм подсказок для любой оболочки, который может изменять строку подсказки с помощью функции или переменной Oh-my-posh
Горизонтально масштабируемая и распределенная база данных GraphQL с бэкендом графа Dgraph
Инструмент для изучения шахматных дебютов Chess-explorer-go
Небольшой и простой компилятор Go Babygo
Cli инструмент для выполнения sql запросов: поддержка sql, csv, ltsv, json, tbln Trdsql
Инструмент для работы с типом файлов MP4 Go-mp4
Платформа для создания приложений блокчейна на Golang Cosmos-SDK
Мониторинг почтовых служб, получение писем, проверка аккаунтов Сheck-mail
Высокопроизводительный, неблокирующий tcp фреймворк Nbio
Быстрый и гибкий DNS-сервер CoreDns
Веб-браузер умеет управлять cookie, историей, созданием вкладок, подменой юзер-агента Surf
Зашифрованная файловая система GoCryptfs
Консольное приложение для отслеживания и мониторинга статистики криптовалют в режиме реального времени Cointop
Интерфейс командной строки git Bit
Сервис собирает забавные сообщения о коммитах из Github Commits.lol
Структура файловой системы, обеспечивающая простой, унифицированный и универсальный API Afero
Реализация FrodoKEM, практическая инкапсуляция ключей с квантовой безопасностью FrodoKEM
Симулятор движения мыши Busy
Видео
Серия уроков «Разработка rest api Golang», автор Maksim Zhashkevych
Серия трансляций по реализации сервисов Golang, автор comerc