Savely
Не работал с gcp
Savely
а куда ж бизнес логику совать?
так в мейне должна быть только инициализация
Savely
вся логика в пакетах
Anonymous
так в мейне должна быть только инициализация
а что запустится как основной поток?
Daniel
Что-то, что мы не контролируем
Daniel
Гугл-клауд, в отличие от большинства "облаков" - настоящее облако.
Anonymous
и это ЧТО-ТО мы должны остановить п Ctrl+C
Евгений
Вот код: 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: он спокойно выходит из фунции своим ходом без костылей
Daniel
Я бы хотел понять, как мы передадим ctrl-c в облако
Anonymous
да клавиатура там виртуальная?
Daniel
Нету
Евгений
Товарищи не подскажите как кильнуть 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) ^^^
Anonymous
сорьки вы изобрели новый тикер? Теперь н не ждет минуту? case <-time.After(time.Minute): //————————— В этом он делает свои дела каждые 1 минуту log.Println("peek: SessionCleanupTask")
Savely
а что за таск вообще? грейсфулл шатдаун в контексте google cloud platform?
Anonymous
это и есть тикер лол
вопрос был как избавиться от минутной задержки 😊 (это уже 3й вариант)
Artem
https://golang.org/pkg/time/#After вот как раз тот самый пример, что парень сделал
Artem
так что всё ок, расходимся
Zver
Какие проблемы с документацией? И какие ограничения?
Ну вот эта конструкция из документации у меня полностью замораживает горутину.
Daniel
Надо лучше читать документацию :)
Daniel
Но там и правда мутный момент
Daniel
Доберусь до компа - напишу
Zver
Какие проблемы с документацией? И какие ограничения?
При том вызов то ли Stop, то ли Reset конкурентно тоже дедлок может вызвать. Уже не помню детали.
Daniel
Ну вот эта конструкция из документации у меня полностью замораживает горутину.
так вот, обычно эта констркуция не применима и не нужна обычно как: где-то на чтении из t.C висит горутина вы делаете t.Stop(), в t.C уезжает значение которое та, висящая горутина, и вычитывает и когда запускается ваше чтение из t.C - он уже пуст, и в нем точно ничего не появится использовать эту конструкцию - и об этом есть в доке - надо ТОЛЬКО если вы точно знаете, что читать из t.C некому
Igor
Народ, всем дорое утро. Подскажите, как в go при отсутствии наследования решается проблема отсутствия наследования? =) Например, я хочу объект db с методом Connect, CreateTable, Insert, итд, А в других пакетах на него подвешивать более высокоуровневые штуки типа GetUsers, GetProducts, итд?
Daniel
именно эта проблема разрешается встраиванием
Daniel
объекты, конечно, есть
Евгений
структуры?
Евгений
с приаттаченными функциями
Daniel
экземпляры типов, если быть точным
Евгений
Structlog. Спецом для замены логруса написали
Он open source? Гугл находит что-то странное для го и популярный питонячий пакет.
Daniel
почему странное? powerman автор
Мерль
Евгений
почему странное? powerman автор
смутило очень минималистично и малораспространено
Denis
Коллеги, есть приглашение на Хакатон на Go в Европе, можно запостить сюда? возможно тут кто-то будет в соответствующих городах
p0rsche
Ребят, а как апдейтнуть отдельные поля в хэше редисе (через HMSET) с помощью redigo/redis?
p0rsche
у меня там структура из Go хранится и нужно обновлять, не совсем поянл как это через Args сделать
p0rsche
conn.Do("HMSET", key, "Field1", value1, "Field2", value2)
Darwin
https://godoc.org/github.com/go-redis/redis#Client.HMSet
p0rsche
https://godoc.org/github.com/go-redis/redis#Client.HMSet
спасибо, но у меня другой клиент
p0rsche
https://godoc.org/github.com/gomodule/redigo/redis
Darwin
используйте этот)))
p0rsche
да вроде разобрался уже
Daniel
А нет такого, что "прочесть-обновить-записать"?
Daniel
Засылайте, да
Daniel
Админы, обратите внимание - я согласовал
Denis
Denis
p0rsche
Во что она сериализована?
я ее засылаю туда через AddFlat(), там простые поля
Denis
p0rsche
в роттердаме и делфте красиво )
Denis
Registration links: https://lnkd.in/gsEVkRq https://www.neo.camp/ https://lnkd.in/gydWJAN
Daniel
Нет, так не бывает.
🏁Александр
Добрый день var result []anyModelStruct findAll(&result) а внутри findAll условно цикл по источнику, вот думаю как заполнить такой слайс
🏁Александр
по идеи мы должны делать { result := append(result, anyModelStruct{ any: value }) } но если функция "универсальная" тогда не получится 🙁
🏁Александр
что-то у меня нет идей как красиво без рефлекта заполнить
🏁Александр
можно конечно вернуть какой нить map[string]interface{}
🏁Александр
и сделать на уровень выше логику преобразования, но я хотел сразу скормить слайс
Daniel
Где вы такие задачи находите?!
🏁Александр
Где вы такие задачи находите?!
ну я сделал DAO обертку, внутри кастомн реализацию couchdb
🏁Александр
думал что реализацию можно отделить от моделей как то
🏁Александр
тоесть как это обычно бывает, слоеный пирог
Nikita
ну я сделал DAO обертку, внутри кастомн реализацию couchdb
это называется activce record и для го он вообще никак не лепится обычно
🏁Александр
это не актив рекорд
🏁Александр
это репозиторий получается