@proGO

Страница 1219 из 1674
Demuz
12.02.2018
11:17:08
всем привет, стоит задача написать бота с горутинами и слушанием вебсокетов сейчас есть какойто фреймфорк под это дело? я на пару лет выпал из go )
Самые из тухлых известных мне веб сокетов, ничем особо не выделяющихся - горилла. А так у kataras/iris беспрецендентный лидирующий веб сокет. Нужна головная боль - бери гориллу, нужна простота и WS фреймворк как он есть, бери iris/websocket.

Aleksey
12.02.2018
11:18:22
ясно, ничего особо не поменялось )

Demuz
12.02.2018
11:20:04
всем привет, стоит задача написать бота с горутинами и слушанием вебсокетов сейчас есть какойто фреймфорк под это дело? я на пару лет выпал из go )
У гориллы всё сами поднимать будете, простые вещи типа комнат, или массива с существующими на данный момент подключениями, или getConnByID, там всего этого просто не реализовывали. В iris это есть и новые спицы для колеса велосипеда вставлять даже не нужно.

Google
Olzhas
12.02.2018
11:40:19
кстати, мне нужно 2+2 сложить, есть фреймворк?

Vasily Romanov
12.02.2018
11:41:55
Olzhas
12.02.2018
11:42:32
не, мне на го нужно или жиквери

Vasily Romanov
12.02.2018
11:43:56
можно в отдельном докере поднять как микросервис

Olzhas
12.02.2018
11:44:24
хотя можно заюзать https://github.com/deuill/go-php и завести код на пыхе

Леша
12.02.2018
12:01:44
https://medium.com/@PurdonKyle/unit-testing-golang-http-middleware-c7727ca896ea это не?
r.RequestURI в middleware - пустой https://pastebin.com/hHXYej42

Roman
12.02.2018
12:40:32
Всем привет. Пишут тут маленькую мониторилку, она отдает ответ в json. Имеется такой вот код: conn, _ := net.Dial("tcp", "ip:port") jsonRequest := []byte(`{"method":"read"}`) conn.Write(jsonRequest) var sendString string connbuf := bufio.NewReader(conn) for{ str, err := connbuf.ReadBytes('\x04') if len(str)>0 { //тут расшифровка json } if err!= nil { break } } формат ответа сервера {"id": 0, "result": ["qqq", "www", "eee", "rrr", "ttt", "yyy"], "error": null} Пытаюсь парсить в структуру: type Result struct { Id int resul []string error string } dat := Result{} _ := json.Unmarshal(str, &dat); но ничего не получается, в массиве result пусто

что я делаю не так?

Alik
12.02.2018
12:41:06
проверьте что возвращает json.Unmarshal

Google
Alik
12.02.2018
12:41:16
он возвращает ошибку, в которой ответ на ваш вопрос

хм у вас в структуре error это string, а в значениях null, проблема может быть в этом

ну и то, что в значениях result это []string, а в структуре map[string]interface{}

Roman
12.02.2018
12:43:04
ойой, это не правильная версия

Roman
12.02.2018
12:43:55
Alik
12.02.2018
12:44:08
json:"имяполя"

John
12.02.2018
12:44:08
какие тэги?
для членов структуры

Roman
12.02.2018
12:44:40
сейчас теги проставлю

John
12.02.2018
12:45:26
сейчас теги проставлю
type Result struct { Id int `json:"id"` Result []string `json:"result"` Error string `json:"error"` }

Roman
12.02.2018
12:45:42
ага, спасибо, прописал

Alik
12.02.2018
12:46:01
ошибка в unmarshal EOF
проверьте также что у вас в str (сделайте Println, там может быть не совсем то, что вы ожидаете)

Roman
12.02.2018
12:46:50
там байты, я же делаю str, err := connbuf.ReadBytes('\x04')

Alik
12.02.2018
12:48:00
я про содержание, а не тип

Roman
12.02.2018
12:48:00
func Unmarshal(data []byte, v interface{})

я про содержание, а не тип
ну если сделать ReadString и вывести, получается то, что я выше скидывал

Спасибо, все получилось!

это я тупил )

Google
Атас
12.02.2018
13:43:12
да, дело в этом. помогло.
не за что слайсы они такие :)

Alex
12.02.2018
13:45:30
слаесы игрушка дьявола

Aleksandr
12.02.2018
13:46:12
не за что слайсы они такие :)
lexer.emit(DigitToken(lexer.context.buffer.Bytes()[:])) lexer.context.buffer.Reset() да, вот тут в момент emit'а, токен отправлялся в канал, выгребался токенайзером, и запускалась следующая итерация, в то время как Reset (см. вторую строчку) еще не отработал

tmp := make([]byte, lexer.context.buffer.Len()) copy(tmp, lexer.context.buffer.Bytes()) lexer.context.buffer.Reset() lexer.emit(DigitToken(tmp)) решило проблему

Artem
12.02.2018
13:58:04
коллеги я тут с GAE разбираюсь и не могу понять есть ли бесплатный вариант как в AWS lambda? хочу попробовать потестить.

или я плохо читаю доки?

Атас
12.02.2018
13:58:18
lexer.emit(DigitToken(lexer.context.buffer.Bytes()[:])) lexer.context.buffer.Reset() да, вот тут в момент emit'а, токен отправлялся в канал, выгребался токенайзером, и запускалась следующая итерация, в то время как Reset (см. вторую строчку) еще не отработал
не, имено после ресета слайс терял данные, ты данные в канал отправил, но еще не прочитал, пришел ресет, ты читаешь, а в слайсе уже следующие данные byte.Buffer вещь своеобразная там надо или либо полноценный Read делать или копирование из буфера с контролем что он не измениться в процессе иначе печалька

Aleksey
12.02.2018
15:05:41
Чятик, а я могу как-то убить горутину по таймауту?

Условно, она занята инфинити лупой, а я хочу её гарантированно прибить по таймауту

Aleksandr
12.02.2018
15:08:40
мб кинуть из процесса-спаунера туда канал, чекать в инфинит лупе если пришло что пора закрывать, тогда break

Alexander
12.02.2018
15:08:54
https://medium.com/@matryer/stopping-goroutines-golang-1bf28799c1cb

Aleksey
12.02.2018
15:09:40
Не могу. Там идёт операция и горутина просто не дойдёт до чтения из канала

Google
Aleksey
12.02.2018
15:12:19
Я тупо не дойду до второго кейса

какая операция идет?
Условно, клонирование репозитория из гита. Я хочу убить это спустя минуту

Arch
12.02.2018
15:12:54
ну делай прирывание при клонировании

прочитал строки, зашел на круг в форе

все что связано с операций в блок дефаулт

как только таймер сработает ретурн или брейк

Admin
ERROR: S client not available

Aleksey
12.02.2018
15:14:04
Хорошо. Я в горутине выполняю атомарную операцию. Не могу её разделить. Но хочу грохнуть её спустя 60с. Так понятнее?

Arch
12.02.2018
15:14:31
атомарную операцию нельзя убить

Aleksey
12.02.2018
15:14:40
Наивный

К сожалению, идея убивать атомарную операцию пришла не с потолка

Arch
12.02.2018
15:15:32
Aleksey
12.02.2018
15:15:46
Я не хочу её делить. Я хочу её прервать

Arch
12.02.2018
15:15:52
Я не хочу её делить. Я хочу её прервать
Еще раз атомарные операции, по тому и называются атомарными, что они не делимые и разделить ее нельзя

например 2-1 - это атомарная операция

У вас что-то с фокусом не то, почитайте что такое атомарные операции, потом задавайте такие вопросы

Alexander
12.02.2018
15:17:49
Я не хочу её делить. Я хочу её прервать
мб как отдельный микросервис и запуск через exec?)

Aleksey
12.02.2018
15:18:46
Вернёмся к исходному вопросу: могу ли я убить горутину не изнутри горутины?

Google
Alexander
12.02.2018
15:19:35
Arch
12.02.2018
15:21:03
Посмотри исходники менеджера горутин
Надежда умирает последней?))))

Alexander
12.02.2018
15:21:14
)))

Задача все равно странная)

Aleksey
12.02.2018
15:23:13
зачем это так?)
мне нужно прикрутить таймаут к тому, во что я не могу вмешаться.

Alexander
12.02.2018
15:23:31
Мб на C/C++ на потоках с врапером под Go переделать

Aleksey
12.02.2018
15:24:19
Я начинаю думать, что на баше это было бы строк на 800 короче и работало бы >_<

Alexander
12.02.2018
15:24:26
)))

Arch
12.02.2018
15:25:15
Плохо тебе...
Как правило такие задачи решаются тем что на самом деле можно переделать то, что по началу нельзя было переделать)))

Arch
12.02.2018
15:25:33
Я начинаю думать, что на баше это было бы строк на 800 короче и работало бы >_<
Тебе никто не мешает сделать врапер нужного процесса на баше

Alexander
12.02.2018
15:25:47
Но лучше не допускать таких вещей

Arch
12.02.2018
15:26:46
Но лучше не допускать таких вещей
Да я сам с таким сталкивался, а в итоге оказывалось что надо один врапер из либы разобрать и все становилось нормально, все таймауты спокойно навешиваются и тд и тп

Страница 1219 из 1674