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