@gogolang

Страница 1112 из 1630
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) } }

Maxim
30.05.2018
08:19:16
%#v
Да, сорян

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

Google
Kirill
30.05.2018
08:20:27
Забыл обернуть, кстати :В
Я думал удалить сообщение, как ты поправишь

Fastumkruk ✅
30.05.2018
08:23:06
@Fastumkruk хоть подайте знак какой
Я разбираюсь, смотрю, код правлю.

@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]

Fastumkruk ✅
30.05.2018
08:35:53
Указатель на какой-то участок кода есть в логах паники?
var message = update.Message.Text тут ошибка 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:36:37
var message = update.Message.Text тут ошибка panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x58 pc=0x619663]
Скорее всего пытаетесь получить поле текста из Message, который в этот момент nil

Fastumkruk ✅
30.05.2018
08:38:42
Скорее всего пытаетесь получить поле текста из Message, который в этот момент nil
Закоментил эту строку и все что с ней связанно, оставил только обработку inline. Теперь не падает. Но не то что надо.

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

На всякий случай отмечу что это два кардинально разных обновления и обрабатывая одно обновление нельзя что-то получить из соседнего

Т.е. если пришло событиие кнопки, то обновление сообщения будет пустым. Что, как бэ, логично

Вы ограничены только в пределах того типа обновлений что вы получили в данной итерации цикла

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

update.CallbackQuery - Пусто тут)
И должно быть пусто, если приходят обычные сообщения

Fastumkruk ✅
30.05.2018
08:46:02
И должно быть пусто, если приходят обычные сообщения
И не должно быть пусто, когда жмякаешь инлайн кнопку) Скорее всего я где то, что то не углядел. Я думаю, что получил достаточно информации, что бы самостоятельно продолжить) спасибо)

Maxim
30.05.2018
08:48:35
И не должно быть пусто, когда жмякаешь инлайн кнопку) Скорее всего я где то, что то не углядел. Я думаю, что получил достаточно информации, что бы самостоятельно продолжить) спасибо)
Напоследок - попробуйте при создании канала с обновлениями явно указать в параметрах GetUpdates в поле AllowedUpdates например: ["message", "edited_channel_post", "callback_query"]

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

Ваша сильно отличаеться?
Не сравнивал, если честно

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

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

ребутаю так https://play.golang.org/p/AMTBAVtCj9P

Zae
30.05.2018
10:04:24
?

Google
Daniel
30.05.2018
10:05:06
а?!

Zae
30.05.2018
10:06:07
golang graceful shutdown
это рестартит сам процесс или систему?

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
this is sparta, а flush-то ты дождался минимально при записи в файл или нет?
по идее система сама должна флашнуть до выключения, как минимум если это ext4

Jentry
30.05.2018
10:09:37
по идее система сама должна флашнуть до выключения, как минимум если это ext4
кому должна? он сискол шлет, ты точно уверен, как он внутри отрабатывает?

Sergey
30.05.2018
10:10:06
конеш, если линукс

> кому должна? системе должна

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

Zae
30.05.2018
10:11:14
так ты ребутаешь после того, как записываешь?
да, через 1.5 сек, но примененные настройки все равно не сохраняются

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
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:32:21
а мапы уже рутино-безопасные стали?

Fastumkruk ✅
30.05.2018
11:32:39
уберите go и будет так как вы хотите
go разве не та команда которая разрешает делать все многопоточно?

Sergey
30.05.2018
11:32:52
go разве не та команда которая разрешает делать все многопоточно?
да. но вы же сами хотите чтобы у вас было синхронно.

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

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

Google
Fastumkruk ✅
30.05.2018
11:33:37
да. но вы же сами хотите чтобы у вас было синхронно.
Я написал, что с go, функция как раз работает как без go, ждает завершение предыдущего вызова.

Sergey
30.05.2018
11:33:42
это троллинг? нет конечно.
ну так я об этом и говорю

нельзя так делать как минимум

Sergey
30.05.2018
11:34:08
Я написал, что с go, функция как раз работает как без go, ждает завершение предыдущего вызова.
смотрите в имплементацию, может быть они лочатся друг об друга, поэтому вам кажется, что они работают однопоточно.

Fastumkruk ✅
30.05.2018
11:34:26
Sergey
30.05.2018
11:34:42
Как можно например?
мьютекс на мапу или использовать syncmap

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

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

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 может еще работают")

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