
Foxcool
27.09.2018
12:59:51
Noooooooooooooooooooo!!!!

Александр
27.09.2018
13:00:02
О да!

David
27.09.2018
13:08:46
Подскажите пожалуйста, при помощи чего можно написать отличный api gateway? Чтобы поддержка http2 была и удобно было писать эндпоинты

Daniel
27.09.2018
13:09:20
grpc

Google

Daniel
27.09.2018
13:09:31
вроде бы - именно он с http/2

David
27.09.2018
13:10:23
Да, но я о коммуникации клиентской части с Api Gateway
Заинтересовался в https://github.com/hellofresh/janus, но вот вопрос: может есть еще что получше?

Mykyta
27.09.2018
13:13:27

David
27.09.2018
13:15:13

Mykyta
27.09.2018
13:15:43

Foxcool
27.09.2018
13:18:21
КракенД?
Или он не годится?

David
27.09.2018
13:20:50

Boris
27.09.2018
14:09:05
Всем привет.
Подскажите, а swagger нормально на API пользовать?
Нужно доку писать для апишки, советуют CRUD в swaggere описывать.
Не пойму правда зачем он нужен и не будет ли это переусложнением.

Artem
27.09.2018
14:11:37
мб оффтоп, но тут исходники аэрофлота выложили на гитхаб

Google

Maksim
27.09.2018
14:11:50

Artem
27.09.2018
14:11:58
с позволения админов ток

Andrew
27.09.2018
14:12:04
https://github.com/aeroflotsrc/webapp

Boris
27.09.2018
14:12:05

Artem
27.09.2018
14:12:14
ну вот ^

Andrew
27.09.2018
14:13:12
это ж не исходники в чистом виде а слепки AuFS (или что там щас в докере юзается)?

Artem
27.09.2018
14:14:35
там питон внутри, а значит и все исходники

Andrew
27.09.2018
14:16:34
я не говорю что там исходников нет, просто не понял как наличие питона говорит о наличии исходников, если что

Artem
27.09.2018
14:18:23

Roman
27.09.2018
14:20:23
Не пинайте сильно - в тупике.
quote := fmt.Sprintf(`
SELECT (SELECT COUNT(moexQuotes.stock_id) as moex FROM moexQuotes where moexQuotes.period_date LIKE('%s')) - (SELECT COUNT(stocks.id) as stocks FROM stocks WHERE stocks.name NOT LIKE('RUR%')) AS DIFF;
`, date)
как заэкранировать %

Daniel
27.09.2018
14:21:08

Roman
27.09.2018
14:21:13
ругается
SELECT (SELECT COUNT(moexQuotes.stock_id) as moex FROM moexQuotes where moexQuotes.period_date LIKE('2018-09-21')) - (SELECT COUNT(stocks.id) as stocks FROM stocks WHERE stocks.name NOT LIKE('RUR\\%!'(MISSING))) AS DIFF;

Daniel
27.09.2018
14:21:55
это на go?

Roman
27.09.2018
14:21:55
видимо Sprintf ожидает что это не просто % а подстановка
да на го

Daniel
27.09.2018
14:22:06
а по-моему - нет

Google

Daniel
27.09.2018
14:22:31
но можно сделать на go
возьмите squirrel
делать динамические запросы sprintf-ом - плохая идея in general

Roman
27.09.2018
14:26:23
зачем мне еще одна абстракция? безопасность от SQL-иньекций? не тот проект - там SQlite домашнего проекта

Daniel
27.09.2018
14:26:48
другого совета у меня для вас нет

Roman
27.09.2018
14:27:00
Ок. За совет все-равно спасибо.

Daniel
27.09.2018
14:27:29
ну и это
% можно из строки формата изъять, поставив на его место %s, и соответствующий параметр добавить
а можно использовать %% - он в % превратится

Andrei
27.09.2018
14:28:28

Илья
27.09.2018
14:29:22

Roman
27.09.2018
14:30:25
Действиетльно %%. Спасибо.

Daniel
27.09.2018
14:31:36
но, как мы понимаем, это стало еще дальше от читабельного

Илья
27.09.2018
14:34:14
hft на sqlite :) бессмысленный и беспощадный

Roman
27.09.2018
14:35:59

Илья
27.09.2018
14:36:26

anatolii
27.09.2018
15:43:11
Подскажите одну штуку, заметил что если на структуру не указать жсон биндинг, то он автоматически биндит поля поднимая регистр первого символа (error = Error) это докуметированная фича или лучше на это не полагаться?

Aleksandr
27.09.2018
15:45:21
если у вас Error в json, то и в структуре Error

anatolii
27.09.2018
15:46:27

Google

Aleksandr
27.09.2018
15:46:48
а, имеется в виду декодирование

anatolii
27.09.2018
15:48:21
да

Aleksandr
27.09.2018
16:02:05
интересный кейс
https://play.golang.org/p/mmKgGj1DclI

Илья
27.09.2018
16:04:33
// To unmarshal JSON into a struct, Unmarshal matches incoming object
// keys to the keys used by Marshal (either the struct field name or its tag),
// preferring an exact match but also accepting a case-insensitive match. By
// default, object keys which don't have a corresponding struct field are
// ignored (see Decoder.DisallowUnknownFields for an alternative).
в доке про это есть, так что known behaviour, но не самое очевидное

Admin
ERROR: S client not available

Алексей
27.09.2018
17:02:26
Настало время, господа
настало время набросить на вентилятор
https://habr.com/post/424649/

Roman
27.09.2018
17:07:15

Алексей
27.09.2018
17:07:52

Roman
27.09.2018
17:07:58

Алексей
27.09.2018
17:08:40
ну там написали фактически, что стандартные http и json либы так себе

Илья
27.09.2018
17:10:01
там написали `
db.SetMaxOpenConns(20) // Sane default
db.SetMaxIdleConns(0)
db.SetConnMaxLifetime(time.Nanosecond)
`
что человек бенчмаркает что-то
но пока не ясно что

Алексей
27.09.2018
17:10:38
исходники там есть, если что
можно самому запустить с исправлениями

Илья
27.09.2018
17:13:10
можно не писать статей и бенмарков, если руки кривые

Google

Алексей
27.09.2018
17:13:45

Roman
27.09.2018
17:13:52

Илья
27.09.2018
17:13:56
зачем вы ее сюда принесли?

Алексей
27.09.2018
17:14:34
прост

Никита
27.09.2018
17:14:55
в общем код на Го ужасно написан
Человек как будто никогда на Го и не писал
Иначе такого бы не было

Илья
27.09.2018
17:15:57
да и ошибки там (автор ничего не поясняет), с отлупами постгри, тк на каждый чих новый коннект

Алексей
27.09.2018
17:16:25
Ну тогда го молодец, раз даже с такими ошибками не особо сильно проиграл джаве

Harry
27.09.2018
18:15:24
пасаны, подскажите че за прикол. почему ответ минусовой?
https://play.golang.org/p/aS1fyikIJrz

Roman
27.09.2018
18:16:45
в стиле "мир такой, каким я его вижу"))

Aleksandr
27.09.2018
18:19:23

Harry
27.09.2018
18:21:16

Max
27.09.2018
19:16:07
кто работал с https://github.com/google/jsonapi
есть проблема что
type MyObj {
my_struct []*MyStruct `jsonapi:"attr,my_struct"`
}
не работает UnmarshalPayload. Как решить?

Александр
27.09.2018
19:21:35
а ты вызываешь его?
там в примере обычный вызов надо
if err := jsonapi.MarshalPayload(w, blog); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}