TGViewer
Cross Join - канал о разработке Cross Join - канал о разработке @crossjoin · 3.82K subscribers
Post #600 3.77K
Вышел 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 - канал о разработке
  • 🔥 16
  • 👍 8
  • ❤ 2
More from @crossjoin
  1. Sep 28, 2026Слышал недавно в каком-то подкасте мысль, что Haskell плохо подходит для вайбкодинга прост…
  2. Sep 26, 2026Антон Жиянов написал мини-книгу по Go-concurrency. Это что-то вроде плотного конспекта с и…
  3. Sep 22, 2026photo post
  4. Sep 14, 2026Поможем Руслану собрать фидбек. Проект некоммерческий 👆
  5. Sep 14, 2026AGBX (Agent Box) — небольшой open-source CLI для запуска Claude Code и Codex в изолированн…
  6. Sep 5, 2026Обалдеть, что творится. На Рейтерс вышла статья, в которой утверждается, что, помимо сканд…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →