Pawel
ну вот зачем простыни постить? плейграунд для чего придумали? gist?
V
непонятно что такое msgs.
Stepan
в какой строке виснет?
Это антивирусная проверка, ей приходит название файла и запускается функция которая осуществляет его проверку. Первый файл принимает и в бд его отправляет, но второй уже не забирает из очереди
Stepan
номер строки в которой Ваш код виснет?
Функция полностью себя отрабатывает
Stepan
Но не запускается повторно
Stepan
Цикл не работает крч
Stepan
msgs через amqp приходит
Pawel
Мда. Соменваюсь, что Вам кто-то что-то полезное скажет по сути до тех пор, пока вы не ответите на мой вопрос. Экстрасенсов тут нема.
Pawel
<-forever - ? Виснет очевидно потому, что не одна горутина не записывает в этот канал
Stepan
forever := make(chan bool) - открываю <-forever закрываю
Stepan
Как я понимаю
Stepan
forever := make(chan bool) go func() { for d := range msgs { log.Printf("Received a message: %s", d.Body) } }() log.Printf(" [*] Waiting for messages. To exit press CTRL+C") <-forever }
Pawel
пример записи в форева - forever <- true
Stepan
Я делал по аналогии с этим кодом
Stepan
Это код из примеров работы с RabbitMQ
Anonymous
Ему не нужно завершаться
в printf же говоришь нажмите ctrl-c - это и есть сигнал, только код его не обрабатывает нормально
Pawel
это всё пофиг из чего вы что взяли. Если вы считываете из канала и не хотите чтобы в этом месте програма висла, вам надо в другой како-то горутине писать в этот канал. Это есть цимес каналов в Го. Вы тур оф го проходили?
Pawel
надо пройти, иначе всё равно ничего путного не выйдет
Stepan
надо пройти, иначе всё равно ничего путного не выйдет
А может в моем случае вообще нецелесообразно пользоваться каналами горутинами?
Stepan
А просто цикл оставить
Pawel
так я же понятия не имею что вам надо. если просто бесконечный цикл, то конечно же ни какой канал не на фиг не нужен
Stepan
Для многопоточности?
Pawel
для синхронной передачи значений мужду горутинами
Pawel
для организации очереди сообщений
Pawel
для блокировки горутины
Stepan
Ну у меня и есть очередь сообщений
Pawel
для предотвращения гонок данных
Stepan
Но формируется она на сервере
Pawel
какую задачу решает канал forever?
Stepan
какую задачу решает канал forever?
Как я понял для асинхронного приема сообщений
Stepan
какую задачу решает канал forever?
Спасибо за советы и объяснения
Pawel
Как я понял для асинхронного приема сообщений
Нет, он не решает. Для этого в другой горутине что-то должно отправляться в канал, а вашей функции должен быть асинхронный оператор select
Artem
а настройках amqp у тебя включен auto-ack?
Stepan
https://gist.github.com/StefanSH/8c4c9e41d7283a35eebbb9801728fa73
Stepan
Вот гистом полный файл
Artem
значит он ждет от тебя ack, nack или reject
Artem
или включи auto-ack если пофигу
Stepan
или включи auto-ack если пофигу
А можете объяснить его суть?
Stepan
Вкратце
Mannaro
Ну чо, го теперь не скачать для лини ;)
Mannaro
Заблокировано (c)
Alexander
для венды можно ?
Artem
они репортируют в брокер, что сообщение отбработано
Artem
если не вызвать, то он ждет обработки без флага auto-ack
Mannaro
хз
тоже нет :)
Alexander
скачаю для вас дистрибутив го, недорого!
Stepan
значит он ждет от тебя ack, nack или reject
То есть мне нужно в брокер сообщение отправлять еще, верно?
Artem
делай в конце d.Ack() или d.Nack() после ошибок
Artem
библа сделает дальше сама
Stepan
В самом конце функции?
Artem
в самом конце тела цикла
Artem
ack если все ок, nack если не ок
Stepan
Stepan
ack если все ок, nack если не ок
а что я в аргументы этих функций передаю?
Artem
в ак ничего, а в нак почитай доку у метода
Artem
смотря какое поведение хочешь
Anonymous
Artem иди работай
Artem
Artem иди работай
ты сначала найди себе ее
Artem
Туда же просто тру?
я думаю тебе нужен false
Stepan
А все
Stepan
Разобрался
Stepan
я думаю тебе нужен false
Спасибо вам огромное
Sergey
Допустим у меня есть XML некоторые поля и их структура мне известна, но есть поля структура которых может изменяться. Как в Go при десериализации записать то что получилось в структуру?
Sergey
Видел что если назвать поле XMLName xml.Name то туда должно записаться имя тега, мб есть что то подобное для значения?