Size: a a a

2019 December 24

DM

Dmitry M in Go-go!
Орб Экксель
А goto оператор в Го приветствуется? Я о таком способе впервые узнал в c++, но там все говорят не использовать его, т.к. получается спагетти-код и тяжело читать и понимать когда ест этот оператор
Ну попробуй переписать без goto https://github.com/nodejs/http-parser/blob/master/http_parser.c
источник

DP

Daniel Podolsky in Go-go!
вот еще информация к размышлению: https://github.com/alecthomas/go_serialization_benchmarks#results
источник

ОЭ

Орб Экксель in Go-go!
У меня была другая задача
источник

ОЭ

Орб Экксель in Go-go!
Подскажите как лучше реши кейс, я новичек в Го.
У меня есть в базе данных таблица со звонками, мне надо их отправлять в свою crm. В Го я беру ещё не отправленные данные из БД, делю их на группы по id оператора(в каждой группе будет от 1 до нескольких звонков). Каждую группу делю обрабатываю в своей горутине. И после выполнения всех горутин мне надо опять забрать данные из БД и опять их обработать как я описал выше. Как мне правильней отслеживать момент когда все прошлые горутины выполнились, что бы начать создавать новые? Некий свой счётчик писать, или через waitGroup как- то можно сделать, или вообще какой-то третий вариант?
источник

АП

Александр Попов in Go-go!
Орб Экксель
Подскажите как лучше реши кейс, я новичек в Го.
У меня есть в базе данных таблица со звонками, мне надо их отправлять в свою crm. В Го я беру ещё не отправленные данные из БД, делю их на группы по id оператора(в каждой группе будет от 1 до нескольких звонков). Каждую группу делю обрабатываю в своей горутине. И после выполнения всех горутин мне надо опять забрать данные из БД и опять их обработать как я описал выше. Как мне правильней отслеживать момент когда все прошлые горутины выполнились, что бы начать создавать новые? Некий свой счётчик писать, или через waitGroup как- то можно сделать, или вообще какой-то третий вариант?
ну можешь через цикл + внутри waitgroup
источник

ОЭ

Орб Экксель in Go-go!
Александр Попов
ну можешь через цикл + внутри waitgroup
В итоге я так и реализовал
источник

ОЭ

Орб Экксель in Go-go!
Выложил полный код на плейгранд. Буду благодарен если кто-то из знающих посмотри и хоть маленький комментарий дадите!
https://play.golang.org/p/kGqxbAsqvWZ
источник

АП

Александр Попов in Go-go!
а зачем time.Sleep(2 * time.Second)
источник

АП

Александр Попов in Go-go!
и ты запускаешь по 1 горутине - какой смысл?
источник

АП

Александр Попов in Go-go!
а не, не по одной
источник

АП

Александр Попов in Go-go!
gLoop можно запустить просто не в go
источник

ОЭ

Орб Экксель in Go-go!
Александр Попов
а зачем time.Sleep(2 * time.Second)
Только для того чтобы горутины быстро не выполнялись
источник

ОЭ

Орб Экксель in Go-go!
Александр Попов
gLoop можно запустить просто не в go
Вынести из функции и засунуть в анонимную?
источник

АП

Александр Попов in Go-go!
вполне можно вызвать -  gLoop(&wg, gCount) без go будет тоже самое
источник

ОЭ

Орб Экксель in Go-go!
Александр Попов
вполне можно вызвать -  gLoop(&wg, gCount) без go будет тоже самое
Но тогда они будут последовательно выполняться, а суть именно в асинхронности
источник

АП

Александр Попов in Go-go!
нет не будут
источник

АП

Александр Попов in Go-go!
у тебя же внутри gLoop тоже плодятся "потоки"
источник

АП

Александр Попов in Go-go!
у тебя сейчас вызывается "поток" который плодит еще "потоки"
источник

АП

Александр Попов in Go-go!
а можно сразу наплодить
источник

ОЭ

Орб Экксель in Go-go!
Александр Попов
у тебя же внутри gLoop тоже плодятся "потоки"
Точно, вы правы. Хорошо что этот код лишь для примера, в реальной программе у меня там нет функции gLoop, а я сразу запускаю фор с горутинами
источник