Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Свежая подборка новостей и материалов
Интересное в этом выпуске
Веб-браузер
Мониторинг почтовых служб
Сканер уязвимостей
Зашифрованная файловая система
Приятного чтения!
Материалы для обучения
Уроки для изучения Golang
Введение в программирование на Go
Go в примерах
Маленькая книга о Go
Руководство для начинающих по разумным абстракциям с использованием 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)) }
Статьи
Рекомендации по безопасности для разработчиков Go
Отправка и подделка писем с помощью пользовательских шаблонов в Golang
CRUD с использованием инфраструктуры GOA
Создание API CRUD
Использовать указатель вместо копии структуры?
Примеры работы с контекстом
Логирование с использованием контекста
Почему следует избегать ioutil.ReadAll
Создание Swagger и пользовательского интерфейса SwaggerUI для фреймворка Echo
Ручное управление памятью в языке Go
Публикация Go-приложения в GitHub
Отложенные задачи в рамках микросервисной архитектуры
Telegram на go, часть 2: бинарный протокол
Go & Kubernetes: быстро развивающиеся микросервисы Golang
Понимание распределения в Go
Как динамически вводить зависимости в структуру
Внедрение зависимостей в GO
Go, локдаун и новый MPD-клиент – встречайте Ymuse
Создаем бессерверное приложение с помощью Azure Functions и Go
Запускаем AssemblyScript в Go
Популярные задачи для собеседований бэкенд-разработчиков на Go и их решения
Инструменты
Пример реализации чистой архитектуры в проектах Go (Golang)
Инструмент непрерывной доставки 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
Подкасты
GenericTalks
Go Time
Ardan Labs. Мастерство в облачных вычислениях
Сообщества
Вопросы по языку на русскоязычном StackOverflow
Информация о митапах
Форум в группах Google
Канал в телеграм