170 похожих чатов

Подскажите мне плиз, кто тут в горутинах шарит 😁 есть такой

код
var (
wg sync.WaitGroup
errorsCh = make(chan error)
)

go func() {
wg.Wait()
close(errorsCh)
}()
for _, url := range urls {
go func() {
defer wg.Done()
wg.Add(1)
...
}()
}
select {
case err := <-errorsCh:
return nil, err
}
...
проблемный ли он?
что будет в случае, если urls пустой

6 ответов

41 просмотр

Привет! Этот код реализует модель конкурентного выполнения задач с использованием горутин и каналов в Go. Проблемы с кодом могут возникнуть в следующих случаях: Если urls пустой (не содержит элементов), то ни одна горутина не будет создана, и wg.Wait() будет вызываться немедленно. В этом случае, канал errorsCh будет закрыт без каких-либо ошибок. Если эта логика соответствует вашим требованиям, то это не проблема. Если urls содержит элементы, то для каждого элемента будет создана отдельная горутина с помощью анонимной функции go func() {...}. Каждая горутина вызывает wg.Add(1) для инкремента счетчика ожидания wg, а затем defer wg.Done() для уведомления о завершении работы. select используется для ожидания ошибок из канала errorsCh. В случае получения ошибки из канала, код возвращает nil и ошибку. Если никаких ошибок не возникает в горутинах и errorsCh не получает никаких значений, то select будет блокироваться и код продолжит свое выполнение. Таким образом, основные проблемы с кодом связаны с обработкой ошибок и с тем, что он может быть заблокирован в случае, если никаких ошибок не возникает и errorsCh не закрывается. В зависимости от требований вашего кода, вам может потребоваться добавить дополнительную логику обработки ошибок или завершения работы горутин.

Данил
Привет! Этот код реализует модель конкурентного вы...

По моему он самую очевидную проблему не сказал

https://pkg.go.dev/golang.org/x/sync/errgroup Возьми это и меньше граблей соберёшь

Alex- Автор вопроса
Maxim Biryukov
https://pkg.go.dev/golang.org/x/sync/errgroup Возь...

да не, err тут для примера, логика там похитрее в общем случае

Alex- Автор вопроса

Если urls пустой (не содержит элементов), то ни одна горутина не будет создана, и wg.Wait() будет вызываться немедленно. В этом случае, канал errorsCh будет закрыт без каких-либо ошибок. Если эта логика соответствует вашим требованиям, то это не проблема. правильно ли я понимаю, что наши опасения опровергнуты чатомГПТ? :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта