Daniel
тогда всем сразу будет видно, что происходит
nvkv
Вот, понял, спасибо тебе, добрый человек Данил
nvkv
Я тут в итоге прочитал про "фьючи" в го
nvkv
это когда ты возвращаешь канал после запуска горутины
nvkv
получается довольно удобненько
Slava
лучше не возвращать канал, а передавать в горутину канал
Slava
таким образом можно контролировать буфер этого канала снаружи
Slava
ну или написать небольшую обвязку, где будет скомпонован канал и context
nvkv
ну в целом я так и сделал
nvkv
var futures []chan TestResult for _, test := range tests { c := make(chan TestResult) go func(t TestFile) { result, err := t.Run() if err != nil { log.Println(err) } c <-result }(test) futures = append(futures, c) } var results []TestResult for _, c := range futures { results = append(results, <-c) }
Сергей
странный вопрос в этой ветке но все же может кто знает есть ли группа где можно задать вопрос по awk 😄
Alexander
стековерфлоу? а что за вопрос?
Yura
google - вот эта группа
Alexander
ну телеграм для оффтопа плохо подходит, это в слеке можно уйти в рендом а там в отдельный тредик :)
Сергей
спасибо попробую
Daniel
а?!
Daniel
пример чего?
Daniel
замыкания?
Daniil
А чего?) *забрал себе стикеры*
Daniil
Slach
замыкания?
замыкания и waitGroup ...
Slach
в waitgroup.Add чтоли передавать замыкание само? или как?
nvkv
имеется в виду var wg sync.WaitGroup for ... { wg.Add(1) go func() { ... wg.Done() }() } wg.Wait()
Slach
ааа... ну это в доке с примернами... ок. wg.Done внутри замыкания... понял спасибо =)
Daniel
извините, отвлекся
nvkv
Но мне, если честно, больше понравилось с фьючами
nvkv
нет вот этого вот хардкора с подсчётом
Daniel
фьючи? в го?
nvkv
фьючи? в го?
ага, это такое модное название для темы, когда ты возвращаешь канал, в который горутина потом что-то напишет
nvkv
это такая себе фьюча, конечно
nvkv
но суть примерно та же
Yura
ага, это такое модное название для темы, когда ты возвращаешь канал, в который горутина потом что-то напишет
Вообще-то, это не совсем future. Future может подождать много goroutine, а значение из канала можно прочитать только один раз.
Yura
Future можно реализовать или через WaitGroup, или путём закрытия канала
Yura
т.е. значение в сторонке, а броадкаст или через close(chan), или через wg.Done()
nvkv
ага, понял
nvkv
Ну вот у меня задачка была, запустить кучу горутин, подождать, пока они все завершат работу и собрать результаты их выполнения в один слайс
nvkv
вейтгрупп как мне поможет результаты собрать?
nvkv
подождать не проблема, хоть с ним, хоть без
Мерль
Не, я понимаю зачем это, я не понимаю, зачем фьючи
nvkv
ну смотри, я запускаю охулиард горутин, собираю их каналы в слайс
nvkv
и потом банальный for-loop'ом одновременно жду и получаю результаты
nvkv
меньше кода
nvkv
А что ещё важнее — меньше стейта
nvkv
я тут изо всех сил смиряю плоть и пытаюсь полюбить Го
nvkv
после кложи и скалы это непросто
nvkv
О, разу уж тут
nvkv
А не появилось ли случайно дебаггера отличного от GDB обвешенного скриптами?
Slach
ну dlv вроде как в golangd встроенный идет https://github.com/derekparker/delve и даже работает
Мерль
ну смотри, я запускаю охулиард горутин, собираю их каналы в слайс
Зачем ? Можно принимать по одному каналу результаты и писать их куда надо (или что нужно с ними делать?)
nvkv
можно, но в таком случае надо заранее знать длину буфера канала
nvkv
а это опять лишний стейт
nvkv
я же не могу со стороны последней горутины сделать close(c)
nvkv
я не знаю когда она там будет
Мерль
я же не могу со стороны последней горутины сделать close(c)
Дык это надо делать на принимающей стороне
Мерль
можно, но в таком случае надо заранее знать длину буфера канала
А в чём проблема знать количество данных, которое к тебе придёт? Если даже не знаешь, то горутины конечно встанут раком на той стороне канала, но только до тех пор, пока ты из него всё не выгребешь
nvkv
Давай я поясню, я знаю, что нет проблемы знать, проблема в том, что если чего-то можно не знать, то лучше этого не знать
nvkv
ну вот такая у меня привычка, как у функциональщика со стажем
nvkv
Ты лучше скажи, чем плохая идея с "фьючами"?
Мерль
Давай я поясню, я знаю, что нет проблемы знать, проблема в том, что если чего-то можно не знать, то лучше этого не знать
В данном случае это не так, тебе как минимум надо знать количество воркеров для того, чтобы создать слайс каналов нужно размера.
nvkv
results = append(results, <-c)
nvkv
он ничего не знает о размерах или количестве
Мерль
Ты лучше скажи, чем плохая идея с "фьючами"?
На самом деле, конечно же, она не так плоха, как можно подумать, просто зачем например создавать много каналов, если можно один?
nvkv
ну вот меня этот вопрос тоже парит
Мерль
results = append(results, <-c)
Ты таким образом получишь много аллокаций вместо одной
nvkv
но да, в принципе засчитано
nvkv
насколько я понимаю канал сам по себе очень дешевая структура