Oleh
а есть разница по памяти для небольшого файла?
ну прочитаешь ты условно 1 мб в оперативку а потом останется только то что нужно все остальное сотрется и произойдет все на столько быстро что и глазом не успешь моргнуть
Aleksandr
да я про реальный мир когда последний раз у вас был текстовый файл со строками по 500кб каждая?
представления не имею. но у меня и задачи обычно бывают написать алгоритм чтения файла, а не чтения определенного файла, размер которого 10 кб
Quet
представления не имею. но у меня и задачи обычно бывают написать алгоритм чтения файла, а не чтения определенного файла, размер которого 10 кб
ну да. видимо задача "прочитать конфиг приложения" у вас решается кластером, ведь "а вдруг там пара петабайт упадет"
Quet
задача все же частенько определяет границы данных
heavycharged
окей, по памяти эффективнее читать два раза, согласен. но по скорости явно быстрее считать все, т.к. обращение к файловой системе
тут зависит от того, как часто обращаются к этим данным, рандомное чтение с SSD вполне себе быстро отдает данные, если человек задается такими вопросами, очевидно что у него не хайлоад с кучей запросов, возможно и сервер тоже не имеет много оперативки, чтобы хранить большой слайс в памяти. тут уж сам автор выбирает что ему, дрочить диск по IOPS и прыгать по сдвигу, или загрузить все в память и работать с этим. я честно говоря не читал вводные, но на маленьких строках можно залить все в слайс и не парится.
Дмитрий
ну прочитаешь ты условно 1 мб в оперативку а потом останется только то что нужно все остальное сотрется и произойдет все на столько быстро что и глазом не успешь моргнуть
в таком случае, если не нужна экономия в памяти, почему не написать простой и красивый код, а не извращаться с двумя циклами и перемоткой файла в начало
heavycharged
тогда уже читать по \n не вариант, так как 1 строка может Гб занимать
так пусть занимает, тебе то что? Ты хранишь номер байта где кончается строка)
Oleh
какая перемотка файла
Oleh
ioutil.ReadAll, strings.Split и вот это все
heavycharged
пусть добавит if'чик, и запаникует, когда файл будет больше 64МБ)))
Дмитрий
какая перемотка файла
в самое начало промотай, я это сразу и кинул
Oleh
тогда о чем спор?) не понимаю)
Дмитрий
тогда о чем спор?) не понимаю)
вот я тоже теперь не понял, ты о скорости что-то заявил
Aleksandr
тогда уже читать по \n не вариант, так как 1 строка может Гб занимать
чтобы \n прочесть, всю строку держать в памяти не нужно
Дмитрий
это уже оффтоп и переливание воды
Дмитрий
есть разница за сколько времени прочитать конфиг з прокси?)
Дмитрий
хватит
Quet
задача не так стояла. конфиг можно и нужно прочитать весь
задача стояла "файл на 2000 строк" можно конечно нафантазировать случай когда "а если там каждая строка по терабайту?" но в реальности все же ограничения на данные более понятны обычно
Oleh
есть разница за сколько времени прочитать конфиг з прокси?)
вы спорили что быстрее прочитать 1 раз или 2 )
Aleksandr
есть разница за сколько времени прочитать конфиг з прокси?)
автор читал рандомную строку а не конфиг
Artem
proxy, err := url.Parse(insta.Proxy) if err != nil { return body, err } insta.Transport.Proxy = http.ProxyURL(proxy) client.Transport = &insta.Transport
Oleh
в котором лежат (как я понял) прокси, много разницы?
Artem
Прокси так ставить?
Artem
А то у меня ошибка :(
Дмитрий
я просто кричу с Артёма, тихо вбросил и ушел
Artem
Не кричи)
Oleh
Oleh
я для своих нужд делал сервис прокси
Oleh
посмотри как сделал, поможет
Oleh
нужно в транспорте свою функцию Dial поставить
Artem
Спасибо, но это вроде не совсем то
Artem
Мне нужно сделать запрос с использованием прокси
Artem
А это у вас для проксирования запросов
Artem
Который на сервер идут
Oleh
все запросы делаются через транспорт
Artem
Возможно просто не так понял
Artem
Нужно ли для https какие-нибудь доп параметры? Или разницы с http нет?
Oleh
нет
heavycharged
у меня есть прога, которая парсит прокси с сайтов где их выкладывают (пару адаптеров сделал), и рядом есть пакет, который дает рандомную прокси и прокси чекер который их чекает в фоне, но писал я это когда только начал писать на go, и там есть косячки, из-за которых подтекает память и может иногда начинаться паника. но мне эта хрень нужна была чтобы отработать около 30 минут, что собственно оно и сделало.
heavycharged
Artem
Поддерживает
Oleh
я с https прокси не подружился а socks5 то шо надо
heavycharged
ещё советую указать на клиенте таймауты, потому что если прокся не вменяемая можно потерять клиент, который будет ждать бесконечно таймаут, не помню какие таймауты по дефолту выставлены
Oleh
в исходниках можно посмотреть какие там стоят и себе такие же поставить или чуть больше
Oleh
если новую структуру инициализировал
Artem
у тебя 90 сек
Oleh
да, я ставил несколько больше чем в исходниках го
Artem
Почему паник не показывает номер строки на которой вылетел
Artem
Можно еще раз, пожалуйста?)
heavycharged
Ты панику ловишь?
Artem
Да
Artem
http: panic serving
heavycharged
ну это твой http клиент видимо ловит, хотя хз, знаю что сервер в хендлерах ловит панику. вообще, когда ловишь панику, то получаешь только ошибку, которая была указана внутри panic(), юзай https://golang.org/src/runtime/debug/stack.go?s=587:606#L11 вот это чтобы получить стектрейс
heavycharged
ну и лови панику на уровень ниже чем её ловит http
heavycharged
если панику никто не ловит, тогда она крашится вместе со стек трейсом
heavycharged
через recover() ))
Oleh
как ты делаешь запрос?
Artem
proxy, err := url.Parse(insta.Proxy) if err != nil { return body, err } insta.Transport.Proxy = http.ProxyURL(proxy) client.Transport = &insta.Transport
Artem
Сам момент установки прокси
Artem
Без прокси то работает
Oleh
смотри ты можешь создать свой клиент https://golang.org/src/net/http/client.go?s=1915:4037#L46
Artem
var req *http.Request req, err = http.NewRequest(method, u.String(), bytes.NewBuffer([]byte(o.PostData)))
Artem
Сам реквест так создается
Oleh
PostData ты ее разве не должен отправлять а не читать?
Artem
Зачем мне её читать?
Oleh
bytes.NewBuffer([]byte(o.PostData))) ну как я вижу это чтение, нет?
Artem
Я то её читаю ,но только чтобы понять какой запрос
Artem
Гет или пост
Artem
method := "GET" if len(o.PostData) > 0 { method = "POST" }
Artem
Нет