Эйч
Эйч
  • Все менторы
Задачи/Go-разработчик/Рефакторинг кода

Рефакторинг кода

Условие задачи

Необходимо с помощью горутин извлечь только уникальные значения из массива, избегая повторений, и сохранить их в канал. Важно реализовать синхронизацию доступа к общему хранилищу уникальных значений, чтобы избежать гонок данных

gofunc main() {
    var alreadyStored = make(map[int]struct{})
    mu := sync.Mutex{}
    capacity := 1000

    doubles := make([]int, 0, capacity)
    for i := 0; i < capacity; i++ {
        doubles = append(doubles, rand.Intn(10)) // create random ints
    }

    uniqueIDs := make(chan int, capacity)
    wg := sync.WaitGroup{}

    for i := 0; i < capacity; i++ {
        i := i
        wg.Add(1)
        go func() {
            defer wg.Done()
            if _, ok := alreadyStored[doubles[i]]; !ok {
                mu.Lock()
                alreadyStored[doubles[i]] = struct{}{}
                mu.Unlock()
                uniqueIDs <- doubles[i]
            }
        }()
    }

    wg.Wait()
    close(uniqueIDs)

    for val := range uniqueIDs {
        fmt.Println(val)
    }

    fmt.Println(uniqueIDs)
}

Профессия

Go-разработчик

Сопроводим до оффера

Умножим шансы на каждом этапе поиска и поможем получить выгодный оффер

Узнать больше

Сервис развития карьеры

Контактыteam@h.careers@hcareers
TelegramVKYouTubeLinkedIn
Профессии
Компания
С чем помогаемОтзывыВопросы и ответыСертификатыВебинарыСтать ментором

Платформа принадлежит ООО "Эйч Карьера"
ИНН 9710095807 ОГРН 1227700077340
Адрес: 127006, город Москва, Старопименовский пер, д. 18 стр. 2, помещ./ком./этаж I/19/2

Copyright © 2020-2025 Сервис развития карьеры Эйч. Все права защищены.

Политика конфиденциальностиПользовательское соглашениеОферта