Лучший способ избежать race condition, в данном случае?
Примеры с каналом
Когда знаем кол-во данных:
https://play.golang.org/p/7pNGCebvqlo
Когда не знаем:
https://play.golang.org/p/7WtVnXwjtuo

Подробности в комментариях:
https://qna.habr.com/answer?answer_id=1901263#comm...
Два варианта.
1. Мьютекс. С чего вы взяли, что воркеры будут выполняться по очереди? Сначала идет какая-то долгая работа конкурентно, а потом мьютекс на короткий промежуток времени закрывает слайс, пока идет в него добавление результата.
2. Канал. Смысл в том, что результаты собираются в одной горутине. Тогда не будет конкурентной записи в слайс. Это более go way. Это можно делать в main или запустить еще одну.