🔥 Успех в IT = скорость + знания + окружение
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_1001_notes
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/golang_interview
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://yangx.top/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://yangx.top/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://yangx.top/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://yangx.top/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_1001_notes
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/golang_interview
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://yangx.top/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://yangx.top/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://yangx.top/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://yangx.top/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
❤4👍2🔥1🥰1😁1
🚀 franz-go — полнофункциональный клиент Apache Kafka на Go, покрывающий все версии протокола с 0.8.0 до современных. Проект выделяется среди аналогов поддержкой транзакций, Exactly-Once-Semantics и всех механизмов аутентификации.
Инструмент имеет продуманный API с акцентом на идиоматичный Go-код: контексты, variadic-опции и минимум накладных расходов. Здесь нет обёрток над C-библиотеками, а производительность достигается за счёт отказа от лишних горутин там, где это возможно. Для администрирования кластера есть отдельный пакет kadm, а интеграция с прометеем и другими системами мониторинга реализована через хуки.
🤖 GitHub
@golang_google
Инструмент имеет продуманный API с акцентом на идиоматичный Go-код: контексты, variadic-опции и минимум накладных расходов. Здесь нет обёрток над C-библиотеками, а производительность достигается за счёт отказа от лишних горутин там, где это возможно. Для администрирования кластера есть отдельный пакет kadm, а интеграция с прометеем и другими системами мониторинга реализована через хуки.
🤖 GitHub
@golang_google
🔥41❤14👍9
🤖 Gotd — мощная Go-библиотека для работы с Telegram MTProto API. Проект предлагает низкоуровневый доступ к методам Telegram с полной поддержкой MTProto 2.0, позволяя разработчикам создавать как пользовательских клиентов, так и ботов.
Библиотека генерирует код на основе официальной документации Telegram, что обеспечивает актуальность и соответствие спецификациям. Реализация включает в себя механизмы для безопасной аутентификации, работу с прокси и обработку обновлений. Проект активно развивается и уже используется в нескольких известных инструментах для работы с Telegram.
🤖 GitHub
@golang_google
Библиотека генерирует код на основе официальной документации Telegram, что обеспечивает актуальность и соответствие спецификациям. Реализация включает в себя механизмы для безопасной аутентификации, работу с прокси и обработку обновлений. Проект активно развивается и уже используется в нескольких известных инструментах для работы с Telegram.
🤖 GitHub
@golang_google
👍27❤10🔥3🥰1
Нужно быстро декодировать, проверить или сгенерировать JWT‑токен в терминале? Попробуй jwtk от Hanashiko.
🔧 Что умеет:
1. Декодирует JWT с подсветкой
2. Проверяет подписи (HS256/RS256)
3. Генерирует токены с настройкой claims и сроков
4. Создаёт RSA‑ключи (
genkeys
)5. Имеет удобный TUI‑интерфейс (
jwtk tui
)💡 Особенности:
1. Поддержка файлов (
--secret
, --keyfile
)2. Без внешних зависимостей
3. Поддержка HS256 и RS256
📥 Установка:
1. AUR:
yay -S jwtk
2. Из исходников:
git clone https://github.com/Hanashiko/jwtk.git
cd jwtk && go mod tidy && go build -o jwtk
sudo mv jwtk /usr/local/bin
🧩 Подходит для:
1. Отладки токенов
2. CI/CD пайплайнов
3. Тестирования API
🔥 Лёгкий, но функциональный инструмент без лишних зависимостей.
🔗 https://github.com/Hanashiko/jwtk
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤8👍3🥰1
Вот основные обновления:
1. Новый уровень работы с cruft packs
- Git хранит неиспользуемые (невидимые) объекты в специальных “cruft packs”.
- Раньше управлять ими было сложно: чтобы добавить или объединить объекты, нужно было всё перепаковывать, что занимало много времени и места.
- Теперь появился флаг
--combine-cruft-below-size
: можно легко объединять мелкие cruft packs в один, постепенно “чистить” репозиторий. - Исправлена важная ошибка: раньше такие объекты могли случайно удаляться раньше времени — теперь это под контролем.
2. Быстрее для больших репозиториев — многослойные битмапы
- В больших проектах Git создаёт специальные “карты” (bitmaps), чтобы быстро понимать, какие объекты нужны для определённых коммитов.
- Новая версия поддерживает “инкрементальные” битмапы для multi-pack index — можно добавлять новые данные быстро, не пересоздавая всю структуру.
3. Новый движок слияния ORT
- Старый движок
recursive
полностью удалён: теперь слияния (`merge`) обрабатывает только быстрый и надёжный ORT.- Это упростит разработку, повысит скорость merge и уменьшит количество ошибок.
4. Улучшения в утилитах и команде cat-file
- Теперь можно фильтровать объекты по типу, например, быстро получить только “деревья” (tree) с помощью
--filter='object:type=tree'
. - Команда для удаления reflog стала интуитивной: вместо сложных параметров просто пишем
git reflog delete <branch>
.5. Больше контроля над сетевыми соединениями
- Добавлены настройки для TCP Keepalive, теперь можно гибко управлять поведением Git в нестабильных сетях.
6. Меньше Perl — проще тестировать и собирать
- Git ещё больше избавился от зависимостей на Perl: тесты и документация теперь проще и стабильнее, особенно на системах без Perl.
7. Работа с разреженными (sparse) репозиториями стала удобнее
- Команды вроде
git add -p
теперь не требуют полной загрузки содержимого — удобно при работе с огромными проектами.8. Косметические улучшения
- При ребейзе (rebase -i) названия коммитов теперь оформляются как комментарии — так ясно, что это просто для ориентира.
9. Быстрее клонируем через bundle-uri
- Git стал лучше справляться с ускоренным клонированием через *.bundle: теперь клиент правильно учитывает все ссылки, ускоряя загрузку репозитория.
Git 2.50 — это не просто исправление багов, а реальное ускорение и упрощение работы для всех, кто ведёт большие проекты, часто сливает ветки и заботится о “чистоте” репозитория. Новые команды делают жизнь проще, а старые баги — ушли в прошлое.
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤13🔥6🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
Outrig — это open-source инструмент для разработчиков на Go, позволяющий:
• 🔍 В реальном времени искать по логам
• 🧵 Отслеживать goroutines
• 📊 Следить за переменными и метриками рантайма
💡 Всё работает локально — никакие данные не покидают вашу машину.
🖥 Поддержка: macOS и Linux (Windows — скоро)
➡️ Идеален для дебага, мониторинга и глубокого понимания поведения Go-приложений.
Github
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤7🔥4🥰1
📬 BillionMail — автономная платформа для email-маркетинга и почтовых серверов
🧩 Что это такое
BillionMail — это self-hosted open-source платформа, которая позволяет:
• Настроить полноценный почтовый сервер
• Управлять рассылками email
• Отслеживать открытие писем и клики
• Контролировать доставляемость и отклонения
• Работать через браузерный интерфейс без зависимости от облака
🚀 Ключевые возможности
• Управление почтовыми ящиками и доменами
• Email-маркетинг с шаблонами, сегментами и аналитикой
• Встроенный SMTP-сервер и логика ретраев
• Поддержка DKIM, SPF, DMARC
• Мониторинг отправок, спама, bounce-статистики
• API и интеграции с внешними системами
⚙️ Технологии
• Backend: Python
• Web-интерфейс: Vue.js
• СУБД: MySQL
• Mail engine: Postfix + Dovecot
• OS: Linux-серверы (Ubuntu/Debian)
🛠 Установка
Запустите:
🔗 Репозиторий
@golang_google
🧩 Что это такое
BillionMail — это self-hosted open-source платформа, которая позволяет:
• Настроить полноценный почтовый сервер
• Управлять рассылками email
• Отслеживать открытие писем и клики
• Контролировать доставляемость и отклонения
• Работать через браузерный интерфейс без зависимости от облака
🚀 Ключевые возможности
• Управление почтовыми ящиками и доменами
• Email-маркетинг с шаблонами, сегментами и аналитикой
• Встроенный SMTP-сервер и логика ретраев
• Поддержка DKIM, SPF, DMARC
• Мониторинг отправок, спама, bounce-статистики
• API и интеграции с внешними системами
⚙️ Технологии
• Backend: Python
• Web-интерфейс: Vue.js
• СУБД: MySQL
• Mail engine: Postfix + Dovecot
• OS: Linux-серверы (Ubuntu/Debian)
🛠 Установка
1. Установите `Docker` и `docker-compose`
2. Клонируйте репозиторий:
```bash
git clone https://github.com/aaPanel/BillionMail.git
cd BillionMail
Запустите:
docker-compose up -d
🔗 Репозиторий
@golang_google
❤6👍5😁2🔥1🤯1
🦙 Gollama — терминальный менеджер для Ollama-моделей. Этот инструмент с TUI-интерфейсом упрощает работу с локальными LLM: от сортировки по размеру и квантованию до редактирования Modelfile прямо в терминале. Горячие клавиши позволяют быстро запускать модели, выгружать их из памяти или копировать на удалённые серверы через функцию "spit".
Инструмент имеет интеграцию с LM Studio для автоматического создания симлинков и расчёт потребления vRAM под разные контексты. Проект активно развивается: недавно добавили поддержку Hugging Face-моделей в калькуляторе памяти.
🤖 GitHub
@golang_google
Инструмент имеет интеграцию с LM Studio для автоматического создания симлинков и расчёт потребления vRAM под разные контексты. Проект активно развивается: недавно добавили поддержку Hugging Face-моделей в калькуляторе памяти.
🤖 GitHub
@golang_google
👍10❤7🔥6
🎯 Email Linter — антифишинговый анализатор для почты
Email Linter — это CLI-инструмент на Go, который помогает выявлять спам и фишинг во входящих письмах, отправленных на одноразовые e-mail адреса (Fastmail, Topicbox и другие, через JMAP).
🔍 Что делает:
• Подключается к вашей почте через JMAP API
• Ищет все одноразовые адреса (Fastmail Masked Email, DuckDuckGo, iCloud и др.)
• Для каждого адреса показывает всех отправителей
• Помогает мгновенно определить фейковый или нежелательный трафик
🛡️ Зачем нужен:
Один из создателей проекта получил фишинг на “маску” — Email Linter помог быстро отследить странный «From» и отключить маску.
⚙️ Установка:
🔐 Безопасность и приватность
• Email Linter не передаёт письма никуда
• Использует локальный keyring для хранения JMAP-токена
• Все данные обрабатываются локально
• В будущем может появиться кэширование, но оно тоже будет локальным
🛠 Технологии
• Язык: Go
• CLI: Cobra
• Сборка: GoReleaser
• Поддержка JMAP (более гибкий аналог IMAP)
• Протестировано с Fastmail и Topicbox
📄 Лицензия
Apache 2.0 — можно использовать в любых проектах, в том числе коммерческих.
🔗 GitHub: github.com/wheelercj/email-linter
Email Linter — это CLI-инструмент на Go, который помогает выявлять спам и фишинг во входящих письмах, отправленных на одноразовые e-mail адреса (Fastmail, Topicbox и другие, через JMAP).
🔍 Что делает:
• Подключается к вашей почте через JMAP API
• Ищет все одноразовые адреса (Fastmail Masked Email, DuckDuckGo, iCloud и др.)
• Для каждого адреса показывает всех отправителей
• Помогает мгновенно определить фейковый или нежелательный трафик
🛡️ Зачем нужен:
Один из создателей проекта получил фишинг на “маску” — Email Linter помог быстро отследить странный «From» и отключить маску.
⚙️ Установка:
go install github.com/wheelercj/email-linter@latest
email-linter --help
🔐 Безопасность и приватность
• Email Linter не передаёт письма никуда
• Использует локальный keyring для хранения JMAP-токена
• Все данные обрабатываются локально
• В будущем может появиться кэширование, но оно тоже будет локальным
🛠 Технологии
• Язык: Go
• CLI: Cobra
• Сборка: GoReleaser
• Поддержка JMAP (более гибкий аналог IMAP)
• Протестировано с Fastmail и Topicbox
📄 Лицензия
Apache 2.0 — можно использовать в любых проектах, в том числе коммерческих.
🔗 GitHub: github.com/wheelercj/email-linter
👍11❤5🔥1🥰1
Gokapi — это минималистичный, self-hosted сервис для временного обмена файлами, написанный на Go. Его цель — быть лёгкой и приватной заменой таким сервисам, как WeTransfer.
⚙️ Возможности:
• Загрузка и скачивание файлов через веб-интерфейс
• Временное хранение (срок жизни настраивается)
• Одноразовые или многоразовые ссылки
• Поддержка паролей
• Простота установки — бинарник и всё
📦 Без лишнего функционала, без регистрации, без отслеживания — только удобный и быстрый обмен файлами.
🔗 GitHub: https://github.com/Forceu/Gokapi
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍11🔥2🥰1
🌀 Go 1.25 приносит мощный апгрейд JSON-библиотеки:
Что изменилось:
● Прямая работа с
Новые функции
● Потоковая обработка JSON
Появился модуль
● Гибкая настройка
Теперь функции
-
-
-
-
-
Пример:
● Новое поведение по умолчанию
Теперь:
JSON-парсинг чувствителен к регистру
Дублирующиеся ключи запрещены
Неизвестные поля игнорируются, если не указано иное
Можно включить прежнее поведение опциями (например, MatchCaseInsensitiveNames)
● Ускорение десериализации
Внутренний движок полностью переписан — ускорение десериализации в 2.7–10.2 раз. При использовании потоковых API (UnmarshalJSONFrom) — прирост до 40×.
● Экспериментальный статус
API ещё может меняться. По умолчанию encoding/json использует новый движок, но json/v2 доступен отдельно и требует флага:
Это — один из самых масштабных апдейтов стандартной библиотеки Go за последние годы. Подходит для тех, кто работает с тяжёлыми JSON-структурами, большими потоками или требует строгого контроля сериализации.
📌 Полный разбор и примеры
@golang_google
#golang #go #JSON
encoding/json/v2
— переработанная с нуля система сериализации с гибкой настройкой, высокой скоростью и новым APIЧто изменилось:
● Прямая работа с
io.Writer
и io.Reader
Новые функции
MarshalWrite
и UnmarshalRead
позволяют писать и читать JSON напрямую, без создания Encoder/Decoder. Это упрощает потоковую работу и уменьшает аллокации.● Потоковая обработка JSON
Появился модуль
jsontext
с функциями MarshalEncode
и UnmarshalDecode
, которые читают и пишут JSON по одному объекту за раз. Это критично для систем, обрабатывающих большие JSON-потоки, например, в Kubernetes.● Гибкая настройка
Теперь функции
Marshal
и Unmarshal
принимают опции, напрямую влияющие на формат вывода и поведение парсера:-
OmitZeroStructFields(true)
— пропускать нулевые поля -
StringifyNumbers(true)
— числа как строки -
MatchCaseInsensitiveNames(true)
— имена полей без учёта регистра -
FormatNilMapAsNull(true)
— nil`-карты как `null
-
WithIndent(" ")
— отступы в JSONПример:
json.Marshal(
user,
json.OmitZeroStructFields(true),
json.StringifyNumbers(true),
jsontext.WithIndent(" "),
)
● Новое поведение по умолчанию
Теперь:
JSON-парсинг чувствителен к регистру
Дублирующиеся ключи запрещены
Неизвестные поля игнорируются, если не указано иное
Можно включить прежнее поведение опциями (например, MatchCaseInsensitiveNames)
● Ускорение десериализации
Внутренний движок полностью переписан — ускорение десериализации в 2.7–10.2 раз. При использовании потоковых API (UnmarshalJSONFrom) — прирост до 40×.
● Экспериментальный статус
API ещё может меняться. По умолчанию encoding/json использует новый движок, но json/v2 доступен отдельно и требует флага:
GOEXPERIMENT=jsonv2
Это — один из самых масштабных апдейтов стандартной библиотеки Go за последние годы. Подходит для тех, кто работает с тяжёлыми JSON-структурами, большими потоками или требует строгого контроля сериализации.
📌 Полный разбор и примеры
@golang_google
#golang #go #JSON
🔥137👍24❤18
🔏 RuleGo — легковесный rule-движок на Go для гибких систем. Когда бизнес-логика становится слишком сложной для хардкода, а традиционные workflow-движки кажутся громоздкими, этот проект предлагает элегантное решение. Инструмент позволяет описывать правила обработки данных в виде JSON-цепочки с компонентами, которые можно пересобирать на лету без перезапуска приложения.
Проект имеет поддержку edge-вычислений — движок стабильно работает даже на Raspberry Pi с потреблением памяти около 19MB. Встроенные компоненты для HTTP, MQTT и JavaScript-трансформаций делают его идеальным для IoT-сценариев, а визуальный редактор RuleGo-Editor упрощает конфигурирование.
🤖 GitHub
@golang_google
Проект имеет поддержку edge-вычислений — движок стабильно работает даже на Raspberry Pi с потреблением памяти около 19MB. Встроенные компоненты для HTTP, MQTT и JavaScript-трансформаций делают его идеальным для IoT-сценариев, а визуальный редактор RuleGo-Editor упрощает конфигурирование.
🤖 GitHub
@golang_google
👍11🔥8🥰3❤2👏1
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍8🔥4🥰1🤔1🤩1
«Go 1.25 interactive tour» — отличный обзор ключевых новинок, запланированных для Go 1.25 (релиз — август 2025)
Основные моменты:
1. Синтетическое время для тестов (synctest)
Новая библиотека testing/synctest позволяет использовать «фейковый» таймер для тестов, без реального ожидания:
🧪 Использование synctest.Test для "синтетического времени"
- synctest.Test(t, func(t *testing.T) {...}) запускает функцию в изолированном "пузыре", где:
- функции пакета time используют фиктивные часы;
- если все горутины заблокированы (например, time.Sleep, select без case), время продвигается вперед автоматически, чтобы "разблокировать" эти операции.
✅ Пример теста:
Здесь мы проверяем, что Read действительно отдает ошибку "timeout", без реального ожидания 60 секунд — synctest просто симулирует, что они прошли.
🕰 Как это работает?
Внутри synctest.Test:
- Время начинается с 2000-01-01T00:00:00Z;
- Когда все горутины заблокированы, время продвигается до следующего события (time.After, time.Sleep и т.д.);
- Это позволяет сразу активировать нужные ветки кода, которые зависят от времени, без настоящих задержек.
⚠️ Ограничения
Внутри synctest.Test нельзя использовать:
Пример неверного использования:
testing/synctest — это инструмент для тестирования кода, зависящего от времени, без реального ожидания, что делает тесты мгновенными и стабильными. Идеально подходит для timeout, retry, delays, ticker, и других случаев, когда вы хотите протестировать "прошло ли время", но не хотите реально ждать.
2. JSON v2 — серьезный апдейт
json/v2 вводит новые функции, включая MarshalToFunc, UnmarshalFromFunc и более гибкую систему маршаллинга с пользовательскими функциями.
Пример:
👉 Подробно можно почитать здесь
3. Container-aware GOMAXPROCS
Теперь Go учитывает ограничения CPU из cgroups – на Docker/Kubernetes GOMAXPROCS автоматически подстраивается под лимит, а не просто равен NumCPU
4. Новый сборщик мусора — Green Tea
Экспериментальный сборщик мусора оптимизирован для больших объёмов мелких объектов, обещают на 10–40 % снижение оверхеда. Включается через GOEXPERIMENT=greenteagc
5. Защита от CSRF (http.CrossOriginProtection)
Добавлен новый тип для отсечения запросов из кросс-доменных источников, анализируя заголовки Sec-Fetch-Site и Origin
6. sync.WaitGroup.Go
Упрощение работы c WaitGroup — теперь можно писать:
Вместо Add + Done
7. Flight Recorder (trace.FlightRecorder)
Flight recording — это способ отслеживать, что происходит в программе: какие функции вызываются, сколько памяти используется и другие важные события.
Но главное — эта запись ведётся не всё время, а только в «скользящем окне»: сохраняются только последние N секунд или последние N мегабайт данных.
👉 Это полезно, когда вы не знаете заранее, когда случится ошибка — flight recorder позволит «поймать» последние события перед сбоем.
8. Расширенные методы os.Root
Добавлены методы Chmod, Chown, Chtimes, Link, MkdirAll, RemoveAll, Rename, Symlink, ReadFile, WriteFile
9. reflect.TypeAssert
Упрощает преобразование reflect.Value в конкретный тип без промежуточного интерфейса.
10. hash.Cloner
Интерфейс клонирования состояния hash-функций (Clone()), поддерживается всеми реализациями STD (SHA-1, MD5 и др.)
📌 Полный обзор обновлений
@golang_google
Основные моменты:
1. Синтетическое время для тестов (synctest)
Новая библиотека testing/synctest позволяет использовать «фейковый» таймер для тестов, без реального ожидания:
🧪 Использование synctest.Test для "синтетического времени"
- synctest.Test(t, func(t *testing.T) {...}) запускает функцию в изолированном "пузыре", где:
- функции пакета time используют фиктивные часы;
- если все горутины заблокированы (например, time.Sleep, select без case), время продвигается вперед автоматически, чтобы "разблокировать" эти операции.
✅ Пример теста:
func TestReadTimeout(t *testing.T) {
synctest.Test(t, func(t *testing.T) {
ch := make(chan int)
_, err := Read(ch)
if err == nil {
t.Fatal("expected timeout error, got nil")
}
})
}
Здесь мы проверяем, что Read действительно отдает ошибку "timeout", без реального ожидания 60 секунд — synctest просто симулирует, что они прошли.
🕰 Как это работает?
Внутри synctest.Test:
- Время начинается с 2000-01-01T00:00:00Z;
- Когда все горутины заблокированы, время продвигается до следующего события (time.After, time.Sleep и т.д.);
- Это позволяет сразу активировать нужные ветки кода, которые зависят от времени, без настоящих задержек.
⚠️ Ограничения
Внутри synctest.Test нельзя использовать:
t.Run(...)
t.Parallel()
t.Deadline()
Пример неверного использования:
synctest.Test(t, func(t *testing.T) {
t.Run("subtest", func(t *testing.T) {
t.Log("fail!") // это работать не будет
})
})
testing/synctest — это инструмент для тестирования кода, зависящего от времени, без реального ожидания, что делает тесты мгновенными и стабильными. Идеально подходит для timeout, retry, delays, ticker, и других случаев, когда вы хотите протестировать "прошло ли время", но не хотите реально ждать.
2. JSON v2 — серьезный апдейт
json/v2 вводит новые функции, включая MarshalToFunc, UnmarshalFromFunc и более гибкую систему маршаллинга с пользовательскими функциями.
Пример:
json.Marshal(vals, json.WithMarshalers(marshalers))
👉 Подробно можно почитать здесь
3. Container-aware GOMAXPROCS
Теперь Go учитывает ограничения CPU из cgroups – на Docker/Kubernetes GOMAXPROCS автоматически подстраивается под лимит, а не просто равен NumCPU
4. Новый сборщик мусора — Green Tea
Экспериментальный сборщик мусора оптимизирован для больших объёмов мелких объектов, обещают на 10–40 % снижение оверхеда. Включается через GOEXPERIMENT=greenteagc
5. Защита от CSRF (http.CrossOriginProtection)
Добавлен новый тип для отсечения запросов из кросс-доменных источников, анализируя заголовки Sec-Fetch-Site и Origin
6. sync.WaitGroup.Go
Упрощение работы c WaitGroup — теперь можно писать:
wg.Go(func() { /* … */ })
wg.Wait()
Вместо Add + Done
7. Flight Recorder (trace.FlightRecorder)
Flight recording — это способ отслеживать, что происходит в программе: какие функции вызываются, сколько памяти используется и другие важные события.
Но главное — эта запись ведётся не всё время, а только в «скользящем окне»: сохраняются только последние N секунд или последние N мегабайт данных.
👉 Это полезно, когда вы не знаете заранее, когда случится ошибка — flight recorder позволит «поймать» последние события перед сбоем.
8. Расширенные методы os.Root
Добавлены методы Chmod, Chown, Chtimes, Link, MkdirAll, RemoveAll, Rename, Symlink, ReadFile, WriteFile
9. reflect.TypeAssert
Упрощает преобразование reflect.Value в конкретный тип без промежуточного интерфейса.
10. hash.Cloner
Интерфейс клонирования состояния hash-функций (Clone()), поддерживается всеми реализациями STD (SHA-1, MD5 и др.)
📌 Полный обзор обновлений
@golang_google
1❤42👍17🔥15😁2