Если несколько горутин читают и пишут в один слайс одновременно — это гонка данных, даже если они обращаются к разным индексам.
append может вызвать реаллокацию: старый массив заменяется новым, и другие горутины продолжат работать с устаревшим указателем
Передача слайса по значению копирует только заголовок , но не данные — горутины всё равно разделяют память
Что делать:
•
sync.Mutex / sync.RWMutex — если нужен общий доступ с защитой• передавать копию данных через канал, если горутина должна работать независимо
• sync.Map или разбиение на независимые диапазоны, если горутины работают с непересекающимися частями
Важный нюанс: если горутины работают со строго непересекающимися индексами и append не вызывается — гонки нет. Но доказать это на ревью сложно, поэтому явная синхронизация предпочтительнее.
🐸Библиотека Go для собеса