.
Ну вот в MySQL если я не ошибаюсь, ты вставляешь строку первым запросом, потом кто тоже вставляет строку сразу после тебя, и твой второй запрос на last_insert_id() вернет айди строки второго человека
.
Это Postgres умный и может вернуть что хочешь из вставляемой строки
doc
Ребята, юзайте returning из базы, вы че тут придумываете??
.
.
Aleksandr
Aleksandr
.
да
Я так понимаю это распространенный подход?
Aleksandr
🎉
Ну окей, что меняет-то? Вернуть из базы id последней записи проще же, не?
🎉
Единственный косяк который я вижу, это что int закончится.
Aleksandr
меняем реализацию репозитория и наш код перестает работать, потому что id не возвращается
doc
🎉
Ну, мало-ли, делит, инсёрт частый.
Aleksandr
то что ты предлагаешь - это называется "текут абстракции". Ты репозиторий реализуешь так, как будто бы знаешь что он будет mysql
Aleksandr
а должен реализовывать так, как будто там может быть что угодно
Aleksandr
поэтому мы можем просто UserStore сделать как предлагаешь ты например. Либо репозиторий
🎉
Не, я делаю через модель, переписать только запросы в базу и всё. Вот по такой схеме https://habr.com/post/329582/
🎉
Kirill
Илья
Почувствовал себя насильником? :-D
aadz
насильница какая!
Илья
Программист теоретик, горе в семье
Илья
Откуда у них эти «шуточки»
aadz
Внизу доска, а сверху - "презентация"... Вобще, кажется, что материал лучше усваивается, если лектор это прямо тут же далает все на доске! Но так сложней готовиться к лекции, для лектора :(
Евгений
Товарищи не подскажите как кильнуть 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()
}
aadz
никак
aadz
если ты уже кого-то загнал в sleep - он будет спать, пока время не пройдет
Евгений
А альтернативый способ сделать background таск с выполнением по времени или до сигнала?
aadz
или до таймаута в switch
Евгений
Так пологаю что это отдельный сигнал который прописываеться в сase и замораживает рутну пока таймер не свиснет?
aadz
нет, не совсем правильно полагаешь
Евгений
А как тогда? Есть еще package https://godoc.org/github.com/robfig/cron он в принцепе работает нормально, но хочется поменьше библиотек...
Евгений
Темболее задачка наипростейшая
aadz
угу
Daniel
У таймера есть стоп и канал. Радость в том, что при стопе в канал уходит сообщение
aadz
aadz
Слушаю лекции про Go Васи Романова. Ничего так, нормально про Go рассказывает. про Go
aadz
https://www.youtube.com/watch?v=9Pk7xAT_aCU
Pawel
Anonymous
aadz
Anonymous
aadz
🎉
А какие есть распространённые практики использования http.Handle и http.HandleFunc? Я так понимаю, первое гибче, но не работает с роутами горилы ибо оно требует второе. Есть какие-то трюки юзать горилу с первым вариантом?
Мерль
🎉
Евгений
Евгений
Мерль
Спасибо, пошёл читать.
а так http.Handle и http.HandleFunc полностью взаимозаменемы
https://play.golang.org/p/c9h4-lEn1tR
🎉
Anonymous
Евгений
Хорошо как тогда правельно ее реализовать?
Anonymous
рутина должна сообщить основному потоку main о своем завершении , думай как
Anonymous
завершение основного потока main - ЗАВЕРШЕНИЕ ПРОГРАММЫ
Евгений
Ну хоть какой-то пример выхода из данной ситуации?
Евгений
То-есть насколько я понял что проблема зависания в:
func init() {
go SessionCleanupTask() // Тут?
}
???
Pavel
В главной когртине обрабатывай сигналы SIGTERM, SIGKILL SIGINT, по сигналу делаешь отмену контекста и ждёшь вейтгруппу
Anonymous
Anonymous
если хочешь в рутине ожидать , туда нужно параметром отправить канал завершения то есть тот канал по которому рутина пошлет сигнал о своем завершении
Savely
ребзя, а кто что юзает из орм-ок разряда sql-first?
Savely
у меня тут сейчас прод на code-first orm-ке написан, по классике со временем не находили нужного в итоге весь код адская каша из orm и rawquery
Savely
gorm юзал, но как-то хз, не очень зашел
Savely
Anonymous
Евгений
Просто задача тривиально простая для модуля на любом языке программирования - запустил поток, в данном случае рутну и через каждую минуту вычищаешь из массива старые данные
Евгений
ну и проверяешь состояние процесса на предмет завершения...
Евгений
Нее os.Exit вообще не вариант...
Anonymous
сколько раз ты использовал os.Exit чтобы выйти из Golang приложения по Ctrl+C?
Daniel
Daniel
Savely
Daniel