Daniel
проблемы возникают толдько у нескольких писателей
Daniel
и то только на этапе закрытия канала
Anthony
Например, когда ты демультиплексируешь, то тут всё просто. Как правило, изначальный источник один, ты последовательно читаешь из него, отправляешь всё в канал, и когда источник закончился, канал закрываешь. На следующей стадии ты хочешь процессить данные из канала в несколько воркеров.
Daniel
ну
Anthony
Именно, ты же заранее не знаешь, какая именно горутина прочитает последние данные из канала
Kirill
и не нужно
Daniel
вообще-то нужно, чтобы канал закрыть
Anthony
а на последующих стадиях ты просто читаешь данные из канала for item := range ch { ... }
Anthony
но вот проблема, чтобы это сработало, кто-то должен канал закрыть
Kirill
Anthony
блин, кто-нибудь на вопрос мне может ответить?
Anthony
а не письками мериться?
🏳️ Phil
читай из канала одним обработчиком и запускай из него горутины. разницы никакой
Kirill
🏳️ Phil
Dmitry
блин, кто-нибудь на вопрос мне может ответить?
Я правильно понял, что писатель в канал один, а читателей(горутин, разбирающих данные из канала) много?
Тогда в каждом читателе достаточно использовать for v := range myChannel { ... } как только канал закроется - цикл прекратится
Daniel
Несколько читателей - не проблема
Daniel
Несколько писателей - вот засада
Anthony
простой пример, типа unix pipe'а: source | processor1 | processor2 | destination
Anthony
именно
Anthony
несколько писателей
Kirill
Daniel
Повторное закрытие канала тоже вызывает панику, вы помните, да?
🏳️ Phil
В древние времена еще счетчик обработчиков делали. когда он обнуляется - диспетчер все закрывает
Daniel
Вот да
Мерль
Daniel
WaitGroup
Мерль
Например канал с пустыми структурами
Anthony
это поможет, когда ты хочешь в обработчиках (которых несколько) получать сигнал "сдохни, мы сваливаем". А когда наоборот? когда штука, которая порождает горутины, должна получить от них сигнал, чтобы закрыть канал, из которого будут читать другие процессоры пайпа?
Kirill
Anthony
ибо если канал не закрыть, range ch будет ждать вечно
Мерль
Daniel
Dmitry
несколько писателей
Да, тогда нужно использовать какой-то метод синхронизации, типа sync.WaitGroup наверное. Т.е. закрывать канал только тогда, когда все писатели закончили
🏳️ Phil
Slava
Помогите с неймингом друзья
Slava
допустим есть некий пакет, который что-то делает для других пакетов
ну к примеру, генерирует флаги по структуре для flag, pflag, urfave/cli
как можно называть эти подпакеты с генераторами? gen/flag gen/pflag, плохи тем, что они совпадают с оригинальными при импорте. ВНИМАНИЕ, нужно не имя для пакета, а шаблон имени для подпакетов генераторов
Мерль
Мерль
adapter_*
Slava
слишком длинно
Slava
и андерскоры ужасные
Slava
зачем они вообще?
🏳️ Phil
Мерль
*gen
Dmitry
А почему бы не просто gen* (слитно, например gencli, genpflag)?
Slava
возможно, но выглядит как-то не по человечески
Dmitry
Согласен, но мне что-то кажется что тут лучше и не придумаешь, если хочется сохранить смысловую связь с пакетом, для которого происходит генерация
Мерль
Либо длинно, либо по-человечески
Slava
можно например префикс или суфикс как название пакета использовать
Slava
типа github.com/herak/herak/flag_herak
Мерль
Мерль
[last news]
Advanced Encoding and Decoding Techniques in Go
MF
Всем привет!
Ребят, кто какие инструменты использует для хранения данных?
Желательно с быстрым доступом к данным для чтения и обновления
Slava
я файловую систему использую
Мерль
MF
Мерль
Ruslans
Мерль
Мерль
Аааа
Ruslans
Kirill
Kirill
когда данные потерять нужно
Ruslans
Мерль
Slava
а в постгресе фсинк на каждую транзакцию?
Dmitry
когда данные потерять нужно
Данные потерять - вряд ли, но в монге есть различные развесёлости https://blog.meteor.com/mongodb-queries-dont-always-return-all-matching-documents-654b6594a827#.r1yvszwwl
Kirill
Slava
зато хорошая реклама для клиентов - "мы врядли потеряем ваши данные"
Dmitry
Kirill
есть еще лучше