@gogolang

Страница 1529 из 1630
Alexander
11.10.2018
02:39:07
нет, не совсем правильно полагаешь

Евгений
11.10.2018
02:42:18
А как тогда? Есть еще package https://godoc.org/github.com/robfig/cron он в принцепе работает нормально, но хочется поменьше библиотек...

Темболее задачка наипростейшая

Alexander
11.10.2018
02:43:08
угу

Google
Daniel
11.10.2018
03:57:02
У таймера есть стоп и канал. Радость в том, что при стопе в канал уходит сообщение

Alexander
11.10.2018
03:59:10
Слушаю лекции про Go Васи Романова. Ничего так, нормально про Go рассказывает. про Go

https://www.youtube.com/watch?v=9Pk7xAT_aCU

Zver
11.10.2018
04:17:25
У таймера есть стоп и канал. Радость в том, что при стопе в канал уходит сообщение
Стоп только с ограничениями работает, да ещё и работа стопа не соответствует документации.

Pawel
11.10.2018
04:24:05
в реальности 12 факторов таки рулят
twelve-factor-app - об этом речь?

Alexander
11.10.2018
06:03:56
просто убрать секцию default либо сделать time.Sleep(10*time.Milisecond) Секция дефаулт нужна если бдействительно хотите ДОБАВИТЬ логику простоя! Если же тупое ожидание то делайте самым простым способом!
Ты хочешь рассказать о методиках программирования человеку, который даже живого языка (родного) освоить не смог, а сразу взялся за формальные, типа Go?

Alexander
11.10.2018
06:10:14


Marlik
11.10.2018
06:30:49
А какие есть распространённые практики использования http.Handle и http.HandleFunc? Я так понимаю, первое гибче, но не работает с роутами горилы ибо оно требует второе. Есть какие-то трюки юзать горилу с первым вариантом?

Google
Мерлин
11.10.2018
06:52:30
Спасибо, пошёл читать.
а так http.Handle и http.HandleFunc полностью взаимозаменемы https://play.golang.org/p/c9h4-lEn1tR

Евгений
11.10.2018
06:54:31
Читай из 2 каналов: Select{ Case <- quit: return Case <- time.After(time.Minute): Log.... } Писал с тлф, но идея понятна )
Пробывал... Сейчас программа перестала вовсе реагировать на Ctrl+C... Точнее грохаеться SessionCleanupTask, a http.ListenAndServe продалжает работать... Я так пологаю что поток уже один раз получил свой сигнал и повторно он уже получить не может?

Vladimir
11.10.2018
07:01:03
Пробывал... Сейчас программа перестала вовсе реагировать на Ctrl+C... Точнее грохаеться SessionCleanupTask, a http.ListenAndServe продалжает работать... Я так пологаю что поток уже один раз получил свой сигнал и повторно он уже получить не может?
не туда смотришь! Старайся понять что написано! Твой SessionCleanupTask() просто завершается , нет логики выхода из приложения , мейн же просто запустил рутину SessionCleanupTask() и пошел дальше! На лицо непонимание основных конструкций языка!

Евгений
11.10.2018
07:03:04
Хорошо как тогда правельно ее реализовать?

Vladimir
11.10.2018
07:03:58
рутина должна сообщить основному потоку main о своем завершении , думай как

завершение основного потока main - ЗАВЕРШЕНИЕ ПРОГРАММЫ

Евгений
11.10.2018
07:05:30
Ну хоть какой-то пример выхода из данной ситуации?

То-есть насколько я понял что проблема зависания в: func init() { go SessionCleanupTask() // Тут? } ???

Paul
11.10.2018
07:07:28
В главной когртине обрабатывай сигналы SIGTERM, SIGKILL SIGINT, по сигналу делаешь отмену контекста и ждёшь вейтгруппу

Vladimir
11.10.2018
07:08:48
То-есть насколько я понял что проблема зависания в: func init() { go SessionCleanupTask() // Тут? } ???
как вариант что ожидание выхода можно делать внутри main

если хочешь в рутине ожидать , туда нужно параметром отправить канал завершения то есть тот канал по которому рутина пошлет сигнал о своем завершении

Savely
11.10.2018
07:10:50
ребзя, а кто что юзает из орм-ок разряда sql-first?

у меня тут сейчас прод на code-first orm-ке написан, по классике со временем не находили нужного в итоге весь код адская каша из orm и rawquery

gorm юзал, но как-то хз, не очень зашел

Евгений
11.10.2018
07:12:59
как вариант что ожидание выхода можно делать внутри main
А как это делать вообще не трогая main вовсе? То-есть в рамках только самого package? Как пример - если переносить код на google сloud platform - то там вообще main не доступен, там все модули...

Google
Евгений
11.10.2018
07:16:49
Просто задача тривиально простая для модуля на любом языке программирования - запустил поток, в данном случае рутну и через каждую минуту вычищаешь из массива старые данные

ну и проверяешь состояние процесса на предмет завершения...

Нее os.Exit вообще не вариант...

Vladimir
11.10.2018
07:20:12
сколько раз ты использовал os.Exit чтобы выйти из Golang приложения по Ctrl+C?

Daniel
11.10.2018
07:20:40
И это чудовищно вымораживает. На что заменили? Zap?
Structlog. Спецом для замены логруса написали

Vladimir
11.10.2018
07:22:05
Дефолтный обработчик ctrl-c именно это и делает
да мы обсуждаем как из модуля где нет main завершить работу ? по Ctrl+C! Осталось понять чего

Savely
11.10.2018
07:23:36
да мы обсуждаем как из модуля где нет main завершить работу ? по Ctrl+C! Осталось понять чего
Там мейн-то есть, просто гугл его редачить не дает, насколько я понимаю

Daniel
11.10.2018
07:23:36
Savely
11.10.2018
07:23:45
Не работал с gcp

Daniel
11.10.2018
07:23:53
Savely
11.10.2018
07:25:26
а куда ж бизнес логику совать?
так в мейне должна быть только инициализация

вся логика в пакетах

Vladimir
11.10.2018
07:25:51
так в мейне должна быть только инициализация
а что запустится как основной поток?

Daniel
11.10.2018
07:26:17
Что-то, что мы не контролируем

Гугл-клауд, в отличие от большинства "облаков" - настоящее облако.

Vladimir
11.10.2018
07:27:17
и это ЧТО-ТО мы должны остановить п Ctrl+C

Евгений
11.10.2018
07:27:37
Вот код: package authHook func SessionCleanupTask() { var quit = make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) // kbdloss,ctrl+c,terminate,quit defer log.Printf("quit=%v\n", quit) for { select { case <-quit: // ———————————- В этом месте он должен реагировать на CTRL+C и.т.д. return case <-time.After(time.Minute): //————————— В этом он делает свои дела каждые 1 минуту log.Println("peek: SessionCleanupTask") } } } func init() { go SessionCleanupTask() }

Ожидаемые результат - нажимаешь Ctrl+С. и как он попадает на обработчик case <-quit: он спокойно выходит из фунции своим ходом без костылей

Google
Daniel
11.10.2018
07:28:08
Я бы хотел понять, как мы передадим ctrl-c в облако

Vladimir
11.10.2018
07:28:37
да клавиатура там виртуальная?

Daniel
11.10.2018
07:28:44
Нету

Евгений
11.10.2018
07:29:18
Товарищи не подскажите как кильнуть time.Sleep(time.Until(nextExecute)) ? А то после CTRL+C приложение еще может минуту висеть пока SIGINT дойдет....? func SessionCleanupTask() { var quit = make(chan os.Signal) signal.Notify(quit, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) // kbdloss,ctrl+c,terminate,quit for { select { case <- quit: return default: nextExecute := time.Now().Add(time.Minute) time.Sleep(time.Until(nextExecute)) log.Println("peek: SessionCleanupTask") } } } func init() { go SessionCleanupTask() }
обычно этот канал делают буферизованным, чтобы не блокировать обработчик сигнала. Тогда он сможет записать сигнал вне зависимости от того, кто-то готов его сейчас вычитать или нет. Иначе он может заблокроваться на записи - неххорошо, Ось подумает, что ее игнорируют. var quit = make(chan os.Signal, 1) ^^^

Admin
ERROR: S client not available

Vladimir
11.10.2018
07:32:31
сорьки вы изобрели новый тикер? Теперь н не ждет минуту? case <-time.After(time.Minute): //————————— В этом он делает свои дела каждые 1 минуту log.Println("peek: SessionCleanupTask")

Savely
11.10.2018
07:34:18
а что за таск вообще? грейсфулл шатдаун в контексте google cloud platform?

Vladimir
11.10.2018
07:36:04
это и есть тикер лол
вопрос был как избавиться от минутной задержки ? (это уже 3й вариант)

Artem
11.10.2018
07:36:40
https://golang.org/pkg/time/#After вот как раз тот самый пример, что парень сделал

так что всё ок, расходимся

Daniel
11.10.2018
07:40:53
Надо лучше читать документацию :)

Но там и правда мутный момент

Доберусь до компа - напишу

Zver
11.10.2018
07:46:06
Какие проблемы с документацией? И какие ограничения?
При том вызов то ли Stop, то ли Reset конкурентно тоже дедлок может вызвать. Уже не помню детали.

Daniel
11.10.2018
08:04:10
так вот, обычно эта констркуция не применима и не нужна обычно как: где-то на чтении из t.C висит горутина вы делаете t.Stop(), в t.C уезжает значение которое та, висящая горутина, и вычитывает и когда запускается ваше чтение из t.C - он уже пуст, и в нем точно ничего не появится использовать эту конструкцию - и об этом есть в доке - надо ТОЛЬКО если вы точно знаете, что читать из t.C некому

Google
many-faced
11.10.2018
08:11:11
Народ, всем дорое утро. Подскажите, как в go при отсутствии наследования решается проблема отсутствия наследования? =) Например, я хочу объект db с методом Connect, CreateTable, Insert, итд, А в других пакетах на него подвешивать более высокоуровневые штуки типа GetUsers, GetProducts, итд?

Daniel
11.10.2018
08:11:50
именно эта проблема разрешается встраиванием

Daniel
11.10.2018
08:12:34
объекты, конечно, есть

Евгений
11.10.2018
08:12:41
структуры?

с приаттаченными функциями

Daniel
11.10.2018
08:12:56
экземпляры типов, если быть точным

Евгений
11.10.2018
08:18:01
Structlog. Спецом для замены логруса написали
Он open source? Гугл находит что-то странное для го и популярный питонячий пакет.

Daniel
11.10.2018
08:19:25
почему странное? powerman автор

Мерлин
11.10.2018
08:24:04
Евгений
11.10.2018
08:35:10
почему странное? powerman автор
смутило очень минималистично и малораспространено

Denis
11.10.2018
08:36:40
Коллеги, есть приглашение на Хакатон на Go в Европе, можно запостить сюда? возможно тут кто-то будет в соответствующих городах

Vladimir
11.10.2018
08:37:51
Ребят, а как апдейтнуть отдельные поля в хэше редисе (через HMSET) с помощью redigo/redis?

Страница 1529 из 1630