Size: a a a

2020 June 17

ВХ

Валентин Хомутенко... in Go-go!
Есть задача — ограничить макс. число попыток логина, после N попыток нужно заблокировать клиенту логин на M секунд. Концептуально норм ли для этого использовать redis с ttl ключами? Может есть какие-то нюансы, которых я не вижу сходу
источник

VP

Vlad Python in Go-go!
Всем привет, я новичек в golang, если кто может помогите пожалуйста memory leak, отправляю запросы на сервер через http.Client закрываю resp.Body через defer resp.Body.Close, но память оперативная потихоньку кушается, через время приостоноваливается потом снова кушается, куда копать
источник

н

нелицеприятный... in Go-go!
Vlad Python
Всем привет, я новичек в golang, если кто может помогите пожалуйста memory leak, отправляю запросы на сервер через http.Client закрываю resp.Body через defer resp.Body.Close, но память оперативная потихоньку кушается, через время приостоноваливается потом снова кушается, куда копать
Запросы в цикле делаете?
источник

VP

Vlad Python in Go-go!
да
источник

VP

Vlad Python in Go-go!
нелицеприятный
Запросы в цикле делаете?
Да
источник

АП

Александр Попов... in Go-go!
Vlad Python
Всем привет, я новичек в golang, если кто может помогите пожалуйста memory leak, отправляю запросы на сервер через http.Client закрываю resp.Body через defer resp.Body.Close, но память оперативная потихоньку кушается, через время приостоноваливается потом снова кушается, куда копать
defer выполнится после выхода из функции
источник

DP

Daniel Podolsky in Go-go!
Валентин Хомутенко
Есть задача — ограничить макс. число попыток логина, после N попыток нужно заблокировать клиенту логин на M секунд. Концептуально норм ли для этого использовать redis с ttl ключами? Может есть какие-то нюансы, которых я не вижу сходу
Редис подойдёт вполне

Но - почему не memcached?
источник

VP

Vlad Python in Go-go!
Александр Попов
defer выполнится после выхода из функции
Да выполняется, так вот допустим, если я делаю в цикле, сделать 1000 тестовых запросов, память куда-то девается или golang для резерва использует память?
источник

ВХ

Валентин Хомутенко... in Go-go!
Daniel Podolsky
Редис подойдёт вполне

Но - почему не memcached?
Редис уже есть в проекте для фоновых задач, проще с ним
источник

DP

Daniel Podolsky in Go-go!
Ну, тогда редис
источник

ВХ

Валентин Хомутенко... in Go-go!
А чем в этом кейсе memcached мог лучше подойти?
источник

DP

Daniel Podolsky in Go-go!
Валентин Хомутенко
А чем в этом кейсе memcached мог лучше подойти?
Он легче
источник

н

нелицеприятный... in Go-go!
Vlad Python
Да выполняется, так вот допустим, если я делаю в цикле, сделать 1000 тестовых запросов, память куда-то девается или golang для резерва использует память?
Если неправильно закрываете то скорее всего мемлик
источник

ВХ

Валентин Хомутенко... in Go-go!
Daniel Podolsky
Он легче
А, в этом смысле. Ну да, редис уже есть все равно.  Спасибо )
источник

VP

Vlad Python in Go-go!
нелицеприятный
Если неправильно закрываете то скорее всего мемлик
что может к примеру не правильно закрыться, в официальной документации указано всегда закрывать Body запроса
источник

н

нелицеприятный... in Go-go!
Vlad Python
что может к примеру не правильно закрыться, в официальной документации указано всегда закрывать Body запроса
Например если делаете дефер внутри цикла не обёртывая в функцию
источник

00

0JLQuCDQotGP0L0= 0x3... in Go-go!
Vlad Python
что может к примеру не правильно закрыться, в официальной документации указано всегда закрывать Body запроса
Можно просто закрыть без defer
источник

00

0JLQuCDQotGP0L0= 0x3... in Go-go!
нелицеприятный
Например если делаете дефер внутри цикла не обёртывая в функцию
По идее можно в анонимную даже? Я правильно понимаю
источник

н

нелицеприятный... in Go-go!
Ну в общем-то да
источник

VP

Vlad Python in Go-go!
нелицеприятный
Например если делаете дефер внутри цикла не обёртывая в функцию
В том то и дело, что ипользую в функции точнее в методе структуры
Вот пример:


func (c *HttpClient) MakeRequest(request *Request)  {
 request.SetHeaders(c.Headers)
 client := &http.Client{Timeout: time.Duration(c.Timeout) * time.Second}
 resp, err := client.Do(request.Req)

 if err != nil {
   log.Fatalln(err)
 }
 defer resp.Body.Close()
}
источник