Size: a a a

2021 May 14

AB

Andrey Burov in Go-go!
вы про?
for {
select {
 case <-ctx.Done():
 case resp <- 111:
}
}
источник

J

Je in Go-go!
https://github.com/golang/go/issues/43082

case err := <-bodyWriter.resc:
может исполняться вперед перед
case <-ctx.Done():
источник

AB

Andrey Burov in Go-go!
ну очевидно, косяк
источник

J

Je in Go-go!
на (cc *http2ClientConn) roundTrip
в либе нет тестов, я ничего не смог нормально протестировать и просто забил, пофиксив у себя локально эту проблемку
источник

AB

Andrey Burov in Go-go!
for {
select {
 case <-ctx.Done():
     return

 default:
    select {
        case <-ctx.Done():
           return
         case ... other:
         default:    
    }
}
}
источник

J

Je in Go-go!
поймал я это именно в Stripe-либе, когда по своей ошибке они еще и retry-навалили на ошибку дохлого контекта, получилось комбо - клиент продолжает слать запросы, сервак получает, а клиент не знает об этом - и так пок не устанут
источник

AB

Andrey Burov in Go-go!
простите за форматирование
источник

J

Je in Go-go!
я это и предложил в issue, но всем пофиг
источник

AB

Andrey Burov in Go-go!
это по ресурсам дороже
источник

J

Je in Go-go!
вообще этот case <-ctx.Done(): лучше даже запрятать куда внутрь roundTrip, видимо, чтоб прям перед записью и проверял
источник

J

Je in Go-go!
ну хотя бы вначале проверить уже было бы лучше, чем ничего, как вы понимаете тоже)
источник

AB

Andrey Burov in Go-go!
https://github.com/golang/go/blob/212d385a2f723a8dd5e7d2e83efb478ddd139349/src/net/http/h2_bundle.go#L7677 при таком раскладе, при забитых других каналах ctx.Done может никогда не прочитаться
источник

J

Je in Go-go!
да, это тоже верно) вообще код выглядит немного дилетантски и как будто заброшеным, то есть на issue даже не отреагировали
источник

AB

Andrey Burov in Go-go!
ну дилетантским я бы не назвал его, у них свой стиль и порой очень странный
источник

AB

Andrey Burov in Go-go!
а то что могли забить болт на это, вполне верю
источник

J

Je in Go-go!
а я бы назвал, ибо на функционал нет тестов, именно на транспорт, я с одной стороны понимаю, что вероятно это было слишком сложно писать тесты на моканый roundTrip, но в данном случае ничего хуже, чем что-то, нельзя написать тест, который бы падал и им пришлось бы фиксить
источник

J

Je in Go-go!
имеем, что имеем - проверяйте контекст сами, и не забывайте про идемпотентность запросов, иначе с отменой контекста можно облажаться
источник

AB

Andrey Burov in Go-go!
да скорее кому-то было нечего делать, он запилил http2, на тесты времени/желания/маны или еще чего не хватило, и со словами "ну что есть, то есть" пустили в общую ветку
источник

A(

Andrew (backEnd) in Go-go!
Подскажите пожалуйста, как реализовать аутентификацию серверную для POST запроса на го?
На курле это вот так просто:
curl -u user:pass -X POST -F 'param1=test' -F 'param2=test'

Нагугливается решение req.SetBasicAuth, но походу это не то, не работает
источник

A(

Andrew (backEnd) in Go-go!
Нашел ресурс, который курл команду в го конвертирует (правда пост параметры не подхватывает) https://mholt.github.io/curl-to-go/
Однако полученный код все равно на сервере 401 вызывает (в то время как команда курла - нет)
   formData := url.Values{
       "param1": {"test"},
       "param2": {"test"},
   }
   req, err := http.NewRequest("POST", url, bytes.NewBufferString(formData.Encode()))
   req.SetBasicAuth(username, password)
   resp, err := http.DefaultClient.Do(req)
источник