heavycharged
а сейчас вы решили указать node *Node
Nikita
у меня в прошлой функции написано тоже написано node
Nikita
а, все, рекомендация пропала
Nikita
значит я исправил
heavycharged
heavycharged
ну, вернее так, канал обладает свойствами очереди (FIFO), и его можно использовать как thread-safe очередь, но только в том случае, если нужно раздавать данные воркерам.
Artem
heavycharged
если нужна именно очередь а не какой-то fan-in/fan-out, тогда лучше в слайс делать.
heavycharged
тут вопрос в том, что иногда у новичков может быть соблазн юзать канал с буфером как очередь, потому что думают, что удобно, не нужно мучиться с проверкой длины слайса, усекать слайс, писать свой queue тип с нужными методами и т.д.
Mikhail
есть какой то вариант реализации поиска подстроки в строке?
Как например в питоне:
"some" in "string"
Мерль
Mikhail
Artem
Можно ли получить строку из файла без цикла?
Artem
Ну я знаю номер, мне нужно значение
Sergei
не распарсил
Дмитрий
эффективнее циклом будет конечно
Artem
Как эффективно получить рандомную строку из файла?
Artem
за 1 цикл
Artem
а то я пока за 2 только смог
Aleksandr
Artem
Там не более 2000 строк
Artem
Задача сделать это за 1 цикл
Artem
Вопрос как?)
Aleksandr
Aleksandr
bufio.Scanner
Scanner provides a convenient interface for reading data such as a file of newline-delimited lines of text
Artem
Дмитрий
так тебе надо получить строку по номеру или рандомную строку из всех? это две разных задачи
Artem
Рандомную строку из файла
Aleksandr
ну с такой постановкой задачи, не зная кол-во строк, конечно никак
Artem
Сейчас это сделано так: считаем кол-во строк, делаем рандом, потом ищем по номеру строки
Дмитрий
Рандомную строку из файла
в таком случае сделай как я написал выше — прочитай весь файл, разбей в массив строк и выбери рандомный индекс
Artem
А как можно курсор на начало поставить, чтобы повторно не открывать файл?
Artem
Как сделать массив, не знаю количества?
Artem
Зная количество я делаю так make([]string, count)
Artem
а если количество неизвестно?
Wingman
make([]string, 0)
heavycharged
это не массив вы делаете, если что
Artem
ну слайсы делаю
Artem
Ну вообще вроде make делает массив и возвращает срез, который ссылается на этот массив
Anton
запиши данные в файл так, чтоб каждая строка занимала один блок (размерность сам выбери, в зависимости от данных)
читай с офсетом равным размер блока * кол-во
общее кол-во блоков - это размер файла
Aleksandr
Aleksandr
Artem
Дмитрий
Aleksandr
Дмитрий
heavycharged
почему?
потому что по памяти вылетишь, если файл большой
Aleksandr
почему?
я выше спросил: гиговый файл?
Wingman
ого, втягиваешься?)
Дмитрий
Wingman
похоже, только циклами
Aleksandr
heavycharged
вообще, можно сделать как-то так:
прочитать весь файл и найти все индексы с "\n", забить в []int
после этого, выбираем рандомный элемент из этого слайса, а элемент -1 - это конец прошлой строки. так можно прыгать по файлу в рандомные места. но это чтобы в памяти все не хранить.
Quet
для файла в 2000 строк наверное не имеет смысла что-то выдумывать
heavycharged
это чтобы не мудохаться с константным оффсетом для всех строк
Quet
ioutil.ReadAll, strings.Split и вот это все
Aleksandr
Anton
Aleksandr
Quet
2000 строк но файл размером в гиг?
Aleksandr
Дмитрий
почему?
Oleh
есть разница за сколько времени прочитать конфиг з прокси?)
Quet
Дмитрий
Quet