Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
10
Конкурентный вывод уникальных элементов среза
Компании, где спрашивали:
HyperRus
Условие задачи
Дан срез целых чисел: values := []int{3, 3, 2, 1, 2, 1, 1, 2, 4}. Необходимо напечатать каждый различный элемент ровно один раз, используя несколько горутин. Порядок вывода не важен, главное – отсутствие повторов. В исходном примере происходит гонка данных при записи в обычную map, что приводит к некорректному результату. Нужно исправить код, обеспечив безопасный конкурентный доступ к общей структуре (например, через mutex или sync.Map).
func main() {
values := []int{3, 3, 2, 1, 2, 1, 1, 2, 4}
var idx map[int]struct{}
for _, v := range values {
go func() {
if _, ok := idx[v]; ok {
return
}
idx[v] = struct{}{}
log.Println(v)
}()
}
}