TGViewer
Cross Join - канал о разработке Cross Join - канал о разработке @crossjoin · 3.82K subscribers
Post #434 3.57K
Proposal sync/v2 в Go

После того как пакет math/rand/v2 показал себя с лучшей стороны, команда Go решила двигаться дальше и взяться за обновление ещё одного важного компонента стандартной библиотеки — пакета sync. Ян Лэнс Тейлор предложил создать sync/v2, который должен сделать работу с конкурентностью в Go более удобной благодаря использованию дженериков. При этом команда старается сохранить простоту и высокую производительность.

Что нового предлагается

sync.Map с дженериками

Самые заметные изменения ждут sync.Map. Теперь она будет поддерживать обобщённые типы:


type Map[K comparable, V any] struct { ... }


Это избавит от утомительных проверок типов при получении значений из sync.Map — код станет и читабельнее, и безопаснее, и эффективнее. Вместо старого метода Range появится новый метод All(), который будет возвращать итератор. Это должно сделать перебор элементов карты более удобным.

sync.Pool тоже получит поддержку дженериков:


type Pool[T any] struct { ... }


Одно из доп. улучшений — замена публичного метода New на функцию-конструктор NewPool. Это должно решить распространённую проблему, когда разработчики случайно вызывают New напрямую вместо метода Get. Новый дизайн также обещает лучше работать с типами вроде []byte — должно быть меньше ненужных аллокаций памяти.


Как жить с двумя версиями

Многих беспокоит, как поддерживать код, где придётся использовать и v1, и v2. Но ситуация не так плоха: типы из пакета sync обычно используются во внутренней реализации, а не в публичных API. Это значит, что переход на новую версию должен быть проще, чем, например, с пакетом net/http.

Хотя некоторые сомневаются, нужны ли вообще пакеты v2, статистика использования math/rand/v2 обнадёживает. Пакету нет ещё и года, а его уже импортируют более 2500 других пакетов. Как отмечает Ян Лэнс Тейлор, это хороший показатель, даже если он пока меркнет на фоне оригинального math/rand.

🫥 Cross Join
GitHub proposal: sync/v2: new package · Issue #71076 · golang/go Proposal Details The math/rand/v2 package has been successful. Let's consider another v2 package: sync/v2. This is an update of #47657. Background The current sync package provides Map and Pool...
  • 👍 17
More from @crossjoin
  1. Sep 29, 2026😱 Отправили свое резюме на 129 вакансий на хх, а в ответ тишина .. Думаете, что дело в ры…
  2. Sep 28, 2026Слышал недавно в каком-то подкасте мысль, что Haskell плохо подходит для вайбкодинга прост…
  3. Sep 26, 2026Антон Жиянов написал мини-книгу по Go-concurrency. Это что-то вроде плотного конспекта с и…
  4. Sep 22, 2026photo post
  5. Sep 14, 2026Поможем Руслану собрать фидбек. Проект некоммерческий 👆
  6. Sep 14, 2026AGBX (Agent Box) — небольшой open-source CLI для запуска Claude Code и Codex в изолированн…
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 →