
Maxim
30.05.2018
08:18:24
Лучше юзать switch для множественных кейсов:
for update := range updates {
switch {
case update.Message != nil:
// Пришло обычное сообщение
case update.CallbackQuery != nil:
// Пришло событие кнопки
default:
// Пришло какое-то иное обновление, рисуем его кишочки в консоли
log.Printf("%#v", update)
}
}

Kirill
30.05.2018
08:19:02

Maxim
30.05.2018
08:19:16
%#v
Забыл обернуть, кстати :В

Google

Kirill
30.05.2018
08:20:27

Maxim
30.05.2018
08:22:43

Fastumkruk ✅
30.05.2018
08:23:06
@Fastumkruk хоть подайте знак какой
for update := range updates {
switch {
case update.Message != nil:
// Пришло обычное сообщение
case update.InlineQuery != nil: //update.InlineQuery тут теперь не пусто
// Пришло событие кнопки
default:
// Пришло какое-то иное обновление, рисуем его кишочки в консоли
log.Printf("%#v", update)
}
Но при попытке обработать инлайн апдэйт, получаю
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x58 pc=0x619663]

Maxim
30.05.2018
08:33:38

Fastumkruk ✅
30.05.2018
08:35:53
Раньше небыло ее

Maxim
30.05.2018
08:36:37

Fastumkruk ✅
30.05.2018
08:38:42

Maxim
30.05.2018
08:39:18
Событие нажатия кнопки приходит, верно?
Вы хотите её перехватывать и что-то делать, насколько я понял

Fastumkruk ✅
30.05.2018
08:40:09

Google

Maxim
30.05.2018
08:40:43
Обычные команды идут в update.Message. События кнопок - в update.CallbackQuery
На всякий случай отмечу что это два кардинально разных обновления и обрабатывая одно обновление нельзя что-то получить из соседнего
Т.е. если пришло событиие кнопки, то обновление сообщения будет пустым. Что, как бэ, логично
Вы ограничены только в пределах того типа обновлений что вы получили в данной итерации цикла

Fastumkruk ✅
30.05.2018
08:42:57

Maxim
30.05.2018
08:44:22
switch {
case update.Message != nil:
msg := update.Message
// в этом кейсе работаете только с msg
case update.CallbackQuery != nil:
call := update.CallbackQuery
// в этом кейсе работаете только с call
}

Fastumkruk ✅
30.05.2018
08:46:02

Maxim
30.05.2018
08:46:37

Fastumkruk ✅
30.05.2018
08:47:02

Maxim
30.05.2018
08:48:35
Остальные типы обновлений кроме указанных в параметре просто не будут приходить. Возможно вы где-то потеряли "callback_query"

Fastumkruk ✅
30.05.2018
08:50:12
Хорошо, спасибо за ответы.

Zae
30.05.2018
10:02:43
а как ребутать систему так чтобы данные не терялись? например у меня есть сервер на который я отправляю настройки и он их парсит и пишет в файл, а после этого шлю запрос на ребут. если я шлю запрос через секунду после записи мои записанные настройки в файл не применяются, версия файла остается старой
ребутаю так
https://play.golang.org/p/AMTBAVtCj9P

Jentry
30.05.2018
10:04:16

Zae
30.05.2018
10:04:24
?

Aleksandr
30.05.2018
10:04:58

Google

Daniel
30.05.2018
10:05:06
а?!

Zae
30.05.2018
10:06:07

Aleksandr
30.05.2018
10:07:01

Zae
30.05.2018
10:07:05
да

Jentry
30.05.2018
10:08:13
this is sparta, а flush-то ты дождался минимально при записи в файл или нет?

Sergey
30.05.2018
10:08:17
так ты ребутаешь после того, как записываешь?

Aleksandr
30.05.2018
10:08:25
да
ребутишь в приложении?:

Sergey
30.05.2018
10:08:50

Jentry
30.05.2018
10:09:37

Sergey
30.05.2018
10:10:06
конеш, если линукс
> кому должна?
системе должна

Zae
30.05.2018
10:10:59

Sergey
30.05.2018
10:11:07
это же не отключение электричества

Zae
30.05.2018
10:11:14

Sergey
30.05.2018
10:11:20
так это
может не по таймеру будешь ребутать всё-таки?

Zae
30.05.2018
10:11:47
а как узнать что настройки записались?

Sergey
30.05.2018
10:12:21
(тут к специалистам по го и flush в нём)

Jentry
30.05.2018
10:12:33
> кому должна?
системе должна
а здесь чото на половину сисколов reboot даже пишут, что нет sync, уже не должна получается http://man7.org/linux/man-pages/man2/reboot.2.html

Aleksandr
30.05.2018
10:12:42
да
ну так может ты просто файл не закрываешь до ребута. пришел сигнал на ребут, пробежался по всем процессам, все закрыл, затем кинул сигнал системе на ребут

Google

Sergey
30.05.2018
10:13:54

Zae
30.05.2018
10:13:59

Aleksandr
30.05.2018
10:15:12

Zae
30.05.2018
10:15:55
а если файла нет?

Sergey
30.05.2018
10:17:01
а если файла нет?
на всякий случай глянь вот это
http://man7.org/linux/man-pages/man2/reboot.2.html
http://man7.org/linux/man-pages/man2/sync.2.html

Aleksandr
30.05.2018
10:17:10

Андрэ
30.05.2018
10:45:44
Aliaksandr привет) а подскажи пожалуйста, я ошибаюсь, или в новой версии fasthttp QueryArgs стало возвращаться urldecoded а раньше не было? Мне кажется, раньше в значениях GET параметров + в %20 не превращался. Ну или меня подглючивает) А то тут сломалось у меня чутка

Fastumkruk ✅
30.05.2018
11:25:59
go send_ Что означает _ ?

Admin
ERROR: S client not available

Daniel
30.05.2018
11:27:17
ничего
имя такое

Fastumkruk ✅
30.05.2018
11:27:28
Хорошо
for i := 0; i < 5; i++ {
if key != "NULL" {
go send_(users[i].key)
}
}
Запустит функцию send() пять раз, т.е. он должен сразу 5 функций запустить. Что может тормозить функцию и заставлять ее ждать заврешение пердыдщуего вызова функции?

Sergey
30.05.2018
11:31:41

Sergey
30.05.2018
11:32:21
а мапы уже рутино-безопасные стали?

Fastumkruk ✅
30.05.2018
11:32:39

Sergey
30.05.2018
11:32:52

Sergey
30.05.2018
11:33:17
syncmap
и к ней можно обращаться через users[i]?

Sergey
30.05.2018
11:33:29

Google

Fastumkruk ✅
30.05.2018
11:33:37

Sergey
30.05.2018
11:33:42
нельзя так делать как минимум

Sergey
30.05.2018
11:34:08

Fastumkruk ✅
30.05.2018
11:34:26

Sergey
30.05.2018
11:34:42

Fastumkruk ✅
30.05.2018
11:35:01

Sergey
30.05.2018
11:35:38

Fastumkruk ✅
30.05.2018
11:35:50

Sergey
30.05.2018
11:36:08
но это не завершение

Andrei
30.05.2018
11:36:34

Sergey
30.05.2018
11:36:37
мб они внутри доступаются к ресурсу, который долго высчитывается

Fastumkruk ✅
30.05.2018
11:36:48

Sergey
30.05.2018
11:36:59
так проверьте на завершение)
google for WaitGroup

Fastumkruk ✅
30.05.2018
11:39:01
так проверьте на завершение)
В конце функции идет принт, что отправка на сервер и время. Разве могут 5 запросов выполняться почти 10 секунд в многопоточности?

Sergey
30.05.2018
11:39:31
во-1х, это не обязательно многопоточность

Denis
30.05.2018
11:39:38
причем тут многопоточность вообще?)

Sergey
30.05.2018
11:39:58
во-2х, без кода send_() практически не возможно сказать
мб они внутри доступаются к ресурсу, который долго высчитывается

Denis
30.05.2018
11:40:10
for i := 0; i < 5; i++ {
if key != "NULL" {
go send_(users[i].key)
}
}
fmt.Println("я здесь а функции send может еще работают")