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
ну телеграм для оффтопа плохо подходит, это в слеке можно уйти в рендом а там в отдельный тредик :)
Daniil
Kirill
Сергей
спасибо
попробую
Slach
Daniel
а?!
Daniel
пример чего?
Daniel
замыкания?
Daniil
А чего?)
*забрал себе стикеры*
Daniil
Kirill
Slach
в waitgroup.Add чтоли передавать замыкание само? или как?
nvkv
имеется в виду
var wg sync.WaitGroup
for ... {
wg.Add(1)
go func() {
...
wg.Done()
}()
}
wg.Wait()
Slach
ааа... ну это в доке с примернами... ок. wg.Done внутри замыкания... понял спасибо =)
Daniel
Daniel
извините, отвлекся
nvkv
Но мне, если честно, больше понравилось с фьючами
nvkv
нет вот этого вот хардкора с подсчётом
Daniel
фьючи? в го?
nvkv
фьючи? в го?
ага, это такое модное название для темы, когда ты возвращаешь канал, в который горутина потом что-то напишет
nvkv
nvkv
это такая себе фьюча, конечно
nvkv
но суть примерно та же
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
я не знаю когда она там будет
nvkv
Oleg
Мерль
nvkv
Давай я поясню, я знаю, что нет проблемы знать, проблема в том, что если чего-то можно не знать, то лучше этого не знать
nvkv
ну вот такая у меня привычка, как у функциональщика со стажем
nvkv
Ты лучше скажи, чем плохая идея с "фьючами"?
nvkv
nvkv
results = append(results, <-c)
nvkv
nvkv
он ничего не знает о размерах или количестве
nvkv
ну вот меня этот вопрос тоже парит
nvkv
nvkv
но да, в принципе засчитано
nvkv
насколько я понимаю канал сам по себе очень дешевая структура
Мерль