UPD: Измененный код, ничего не меняется
У меня утечка памяти в этой функции, но я не знаю, где.
func CheckProxySOCKS(prox string, c chan QR) (err error) {
//Sending request through proxy
dialer, _ := proxy.SOCKS5("tcp", prox, nil, proxy.Direct)
timeout := time.Duration(5 * time.Second)
httpClient := &http.Client{Timeout: timeout, Transport: &http.Transport{Dial: dialer.Dial}}
res, err := httpClient.Get("https://api.ipify.org?format=json")
if err != nil {
c <- QR{Addr: prox, Res: false}
return
}
_, err = ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
return
}
c <- QR{Addr: prox, Res: true}
return
}
Здесь я назвал это
for _, proxy := range splitedProxies {
go code.CheckProxySOCKS(proxy, respChan)
}
for range splitedProxies {
r := <-respChan
if r.Res {
checkedProxiesArray = append(checkedProxiesArray, r.Addr)
}
}
После 3-4 циклов я получил более 40 тыс. Операций (я проверяю это runtime.NumGoroutine()
). После запуска приложение использовало около 100 Мб после 4 циклов более 1 ГБ
Github репо со всем кодом