Artem
а где видишь?
Это паник ловлю
Artem
В консоли вижу
Slava
должно в виде ошибки возвращаться
Slava
может ты где-то не перехватываешь?
Slava
покажи код
Artem
resp, err := client.Do(req) if err != nil { fmt.Sprintf("Error: %s", err.Error()) return body, err }
Artem
Перехватываю
Sergei
fmt.Sprintf?
Artem
Ну?
Sergei
Sprintf formats according to a format specifier and returns the resulting string.
Artem
Как можно отловить где у меня index out of range ?
Илья
А код не показывал?
Илья
Не нахожу ссылок
Artem
Там код около 2000 строк и несколько файлов
Artem
Aleksandr
ну и ты не видишь путей файлов и номеров строк?
Artem
Там ничего нет, чтобы вызывало это
Aleksandr
main.go:74 покажи
Artem
fmt.Println(p)
Aleksandr
по-моему подвираешь. скрин покажи участка кода вместе с номерами строк, +-10 строк
Artem
что за подвираешь
🏁Александр
подвираешь - нагло соврал, каналья 🙂
Aleksandr
что за подвираешь
заблуждаешься, глаза залил - не видишь номеров строк, смотришь в другой код и дезинформируешь - выбирай сам
Aleksandr
трейс паники не соотносится с тем, что ты показываешь
Artem
Понял, сам разберусь)
🏁Александр
это жжж неспроста!
🏁Александр
@zelenin помоему мы близки к разгадке тайны иллюминатов, человек сразу ушел что бы не раскрыть еще больше
Sergey
Подскажите, нормально использовать буферезированный канал для ограничения количества запускаемых горутин или есть другой выриант?
Andrey
нормально. других вариантов тоже много, например https://godoc.org/golang.org/x/sync/semaphore
G72K
Тоже таким способом удалось добиться результата и понять. Спасибо!
В Го какие-то искусственные ограничения на обращение к элементу мапы по адресу. Объясняют это тем, что мапа может двигать свои элементы в памяти по мере роста
Sergey
Как это?
blockChan = make(chan bool,5) for { blockChan<-true go func(){ //WORK <-blockChan }() } как то так
Andrey
такой подход в самом go используют: https://github.com/golang/go/blob/964639cc338db650ccadeafb7424bc8ebb2c0f6c/src/net/net.go#L592
G72K
blockChan = make(chan bool,5) for { blockChan<-true go func(){ //WORK <-blockChan }() } как то так
А при панике он обратно в blockChan записать сможет? Через defer?
G72K
s/записать/прочитать/
Sergey
А при панике он обратно в blockChan записать сможет? Через defer?
я думаю можно ведь defer выполняется практически всегда
Sergey
хотя вот defer у меня не выполнялся когда я ждал канал в select, но закрывал его раньше чем он освободится
Anonymous
ребят, есть забавный пример https://stackoverflow.com/questions/15715605/multiple-goroutines-listening-on-one-channel почему это с каналами происходит? и вопрос, можно ли как то ставить мьютекс на чтение из канала?)
Anonymous
ребят, есть забавный пример https://stackoverflow.com/questions/15715605/multiple-goroutines-listening-on-one-channel почему это с каналами происходит? и вопрос, можно ли как то ставить мьютекс на чтение из канала?)
В чём смысл упорядочивать горутины, если они одинаковые? Ну четвёртая в примере оказалась самой резвой, что с того? ))
Anonymous
В чём смысл упорядочивать горутины, если они одинаковые? Ну четвёртая в примере оказалась самой резвой, что с того? ))
вопрос не в скорости, при запуске н-кол-во воркеров, при старте в самый первый момент времени все эти воркеры запущенные в рутинах вычитывают одно и тоже значение из канала
Anonymous
я вот сейчас это наблюдаю в 1.9
Anonymous
Запустил пример по ссылке в play.golang.org, отработал только один горутин
Anonymous
я вот сейчас это наблюдаю в 1.9
Время обновиться на 1.10 ))
Anonymous
ща проверю, ожидайте)
Anonymous
неа, такое же на 1.10
Kirya
можно пример кода, тоже проверю?
Anonymous
неа, такое же на 1.10
Хех, у меня первые пять раз сработало, теперь тоже фигня какая-то 😂
Anonymous
вот пример https://play.golang.org/p/eXUciafpLo3
Anonymous
если раскоментить sleep то все работает норм
Kirya
так там код не правильный
Anonymous
что не правильно?
Kirya
ты в горутине используешь переменную, которая в range меняется
Anonymous
jobs?
Kirya
go func(j int) { defer func() { pool <- w wg.Done() }() fmt.Printf("worker: %d -> job #%d\n", w, j) }(job) вот так хотя бы
Kirya
ну а что ты хочешь?
Anonymous
потому что оно в отдельной рутине
Kirya
пишешь не правильный код и говоришь что не работает)
Anonymous
почему не в отдельной не работает
Anonymous
мне не кажется что это не правильный код)
Kirya
где? пример есть?
Kirya
то, что ты показал не правильно
Kirya
это тоже самое что обращаться к глобальной переменой из разных горутин и пытаться предсказать её состояние
Kirya
почему не в отдельной не работает
потому что это разный контекст
Kirya
канал не тоже самое что и глобальная переменная)
я про переменную job, которая меняется в range
Kirya
и когда ты достаёшь её значение в горутине, оно уже изменено range'м
Anonymous
я про переменную job, которая меняется в range
так она же из канала читается
Kirya
и что?
Kirya
горутина то запущена в range
Anonymous
потокобезопасноть в каналах как бы
Anonymous
хорошо, почему если есть слип то все работает тогда?)
Kirya
сделай вот так for job := range jobs { j := job
Kirya
хорошо, почему если есть слип то все работает тогда?)
потому что горутина успевает запуститься и прочитать текущее значение job в итерации range
Anonymous
сделай вот так for job := range jobs { j := job
вот, теперь понятно, спасибо