
Demuz
12.02.2018
11:17:08

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

Demuz
12.02.2018
11:20:04

Alexander
12.02.2018
11:25:00

Google

Olzhas
12.02.2018
11:35:54

Demuz
12.02.2018
11:37:14

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

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
ойой, это не правильная версия

John
12.02.2018
12:43:23
Всем привет.
Пишут тут маленькую мониторилку, она отдает ответ в 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 пусто
Теги забыл добавить

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{})
Спасибо, все получилось!
это я тупил )

Google

Aleksandr
12.02.2018
13:34:41
спасибо

Атас
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
Чятик, а я могу как-то убить горутину по таймауту?
Условно, она занята инфинити лупой, а я хочу её гарантированно прибить по таймауту

Arch
12.02.2018
15:08:24

Arch
12.02.2018
15:08:32
Разрешаем)

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
Не могу. Там идёт операция и горутина просто не дойдёт до чтения из канала

Arch
12.02.2018
15:10:20
как - то так оно делается

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

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

Google

Arch
12.02.2018
15:18:56

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
Плохо тебе...
Как правило такие задачи решаются тем что на самом деле можно переделать то, что по началу нельзя было переделать)))

Alexander
12.02.2018
15:25:28

Arch
12.02.2018
15:25:33

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

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