TGViewer
PRO Go PRO Go @pro_gofer · 3.3K subscribers
Post #688 867
Про гонки данных🏁

Есть у конкурентности особый сорт багов, после которых хочется закрыть ноутбук и пойти погулять. Тесты зелёные, локально всё сходится. А потом приходит отчёт с прода, и сумма в нём меньше, чем должна быть. Не вдвое, а вот на чуть-чуть, будто пара операций куда-то потерялась по дороге.
Они и правда потерялись.

Дело в том, что counter++ только выглядит как одно действие. На самом деле это прочитать, прибавить, записать обратно. И если между «прочитать» и «записать» в ту же переменную успела влезть соседняя горутина, её работа затирается. Без ошибки и без паники.

Обиднее всего, что повторить это специально почти нереально. Запускаешь двадцать раз, двадцать раз всё хорошо. Поэтому такие штуки спокойно живут в проекте месяцами и вылезают в самый неподходящий момент.

Но ловить их Go умеет сам: go test -race

Он расставляет проверки и прямо показывает, какие горутины полезли в одну память и в каких строчках. Первый запуск -race на своём проекте — обычно смешанные ощущения, потому что почти всегда там находится что-то, о чём ты не подозревал.
  • ❤ 4
  • 🔥 1
More from @pro_gofer
  1. Oct 13, 2026Как восстановить доступ к курсу пока Stepik недоступен🙏 Stepik сейчас недоступен, но твоё…
  2. Oct 13, 2026Друзья, доброго дня! Как многие уже заметили, Stepik уже несколько дней не работает🥺 — ав…
  3. Oct 6, 2026#memes
  4. Oct 4, 2026Где хранить данные 💾 Классическая история. Написана первая серьёзная программа — консольн…
  5. Sep 28, 2026Вайбкодеры напряглись
  6. Sep 24, 2026sql.Open 🔌 Помню, как в первый раз полез из Go в базу и минут сорок не понимал, почему вс…
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 →