3.3Kпросмотров
89.0%от подписчиков
15 февраля 2026 г.
statsScore: 3.7K
Вышел Go 1.26. Все написали, а я туплю Если коротко: релиз не про синтаксический сахар, а про производительность, рантайм и инструменты для продакшена. Новый сверхбыстрый json так и не вышел из стадии experimental (там есть проблемы с памятью и обратной совместимостью) Новый сборщик мусора Green Tea В Go 1.26 по умолчанию включён новый сборщик мусора Green Tea. Он сканирует память пачками (по span’ам), лучше использует кэш CPU и умеет в векторизацию на amd64. Ожидания команды - минус 10-40% накладных расходов GC в реальных приложениях. Особенно полезно для сервисов с высокой нагрузкой и большим количеством мелких объектов. Быстрее cgo и syscalls до 30% быстрее cgo-вызовы около 9% ускорения системных вызовов Быстрее мелкие аллокации Для объектов размером 1-512 байт добавлены специализированные пути аллокации. В синтетических тестах до ~30% быстрее для маленьких объектов. В реальных сервисах команда ожидает ~1% общего выигрыша. new(expr) Теперь new можно вызывать не только с типом, но и с выражением: p := new(42) Удобно для optional-полей со ссылками (JSON, protobuf), когда нужно быстро создать bool, int и т.д. Без лишних временных переменных. errors.AsType Появилась type-safe альтернатива errors.As: errors.AsType. без лишних переменных, быстрее, меньше аллокаций, + некоторые ошибки ловятся на этапе компиляции bytes.Buffer.Peek Метод Peek(n) позволяет посмотреть следующие N байт без сдвига буфера. Удобно для протоколов и парсеров. Профилирование утечек горутин Экспериментальный goroutineleak в runtime/pprof. Теперь можно выявлять зависшие горутины в продакшене - не дедлок, а именно утечки, когда горутина навсегда блокируется, но процесс продолжает жить. + добавлены новые метрики по горутинам В log/slog появился MultiHandler. Теперь можно из коробки писать логи сразу в stdout и файл (или в несколько систем), без кастомных обёрток. Reader-less crypto Большинство функций в crypto-пакетах теперь игнорируют переданный io.Reader и используют системный источник случайности. Это убирает зависимость от конкретной реализации и делает поведение стабильнее между версиями Go. fmt.Errorf Для строк без форматирования fmt.Errorf("x") теперь почти не отличается по аллокациям от errors.New("x"). Можно перестать думать над тем, какую функцию выбрать. io.ReadAll Переписан алгоритм роста буфера: • примерно в 2 раза быстрее
• в 2 раза меньше памяти Cross Join - канал о разработке