Billyfbrain
vim+SQLUtilities
Dmitry
Что лучше использовать для чтения Body запроса: ioutil.ReadAll() или (b *Buffer) ReadFrom() из bytes?
Altay unstppbl
Что-то мне подсказывает что они делают разные вещи
Anonymous
Здравствуйте. Подскажите orm для go максимально по синтаксису похожую на peewee orm из python
Aleksandr
Здравствуйте. Подскажите orm для go максимально по синтаксису похожую на peewee orm из python
выбирать особо не из чего. их всего пяток более-менее поддерживаемых
Pawel
Пяток это много кстати
Alex
Что лучше использовать для чтения Body запроса: ioutil.ReadAll() или (b *Buffer) ReadFrom() из bytes?
В зависимости от того что тебе там приходит , если тело json то я обычно через ioutill.ReadAll делаю , по бенчмаркам мерял самый быстрый способ был , если post с формой то в зависимости от параметров
Oleg
кто как в REST API PATCH делает?
Oleg
или частичный патч?
Aleksandr
конкретизируй
Oleg
вот у тебя есть REST PATCH, который принимает данные для частичного апдейта сущности. Ты его анализируешь и строишь уже к примеру апдейты к базе. Кто как делает это?
Aleksandr
я думаю это зависит от db-слоя. если ормка, то апдейтишь поля у сущности, дальше орм сама сохрпаняет. если голый sql, то создаешь update из пришедших полей. Это ты хочешь знать?
Oleg
есть варианты jsonpath2sql?
Oleg
gorm кстати норм или что еще посоветуете?
Oleg
Какой фреймворк посоветуете для написания апи, вот прям чтобы потом можно было и в продакшене юзать? Я пока на биго остановился, пользуется им кто-нибудь?
.
Можно и стандартный использовать
Aleksandr
обсуждение фреймворков здесь близко к нулю, потому что ими никто не пользуется
.
Каждый раз когда заходят такие разговоры, понимаю, насколько хорошо что в Го есть достаточно много стандартных хороших либ на все случаи жизни
Oleg
Просто писать апи с тем же гориллой? вроде довольно удобен, но не шибко быстрый, а net/http слышал что не особо много в проде работает, или не правда?
Slava
про net/http не в проде - смешно =) только он везде и в проде
Kirill
Люблю gin, но это лично мое мнение, не подкреплённое никакими измерениями
Pawel
go-chi
+1 только это роутер, не фреймворк
Roman
кто как в REST API PATCH делает?
Никак. Не работает оно
Oleg
А как же fasthttp?
там что-то давненько комитов не было
Kirill
он от этого менее стабильным не стал
Slava
А как же fasthttp?
а что с ним?
rglitchard
подскажите пожалуйста проект лежит по пути /Users/milkiweed/go/src/bolsche в директории 2 файла , все начинаются со строк package bolsche прописывал команды go install bolsche, все завершалось без ошибок но когда ввожу go run и любой файл из моей директории - получаю > go run: cannot run non-main package указывал GOPATH, проект уже туда кинул и следовал советам, которые удалось нагуглить; ничего толкового не нашел
Slava
в го executable только main пакеты
Roman
а что с ним?
с ним все хорошо
Slava
к чему тогда ваш вопрос?
Roman
к чему тогда ваш вопрос?
вы утверждаете что только net/http в проде, что совсем не так.
rglitchard
в го executable только main пакеты
а что это значит? немного не понял как в данной ситуации лучше поступить?
Slava
Slava
а что это значит? немного не понял как в данной ситуации лучше поступить?
можно начать с изучения го тура, там как раз в первой лекции про это https://tour.golang.org/basics/1
.
я пренебрёг десятыми долями процента
Почему стандартный net/http используется реже чем fasthttp?
Slava
всё ровно наоборот
Roman
Почему стандартный net/http используется реже чем fasthttp?
потому что штатный медленнее и аллоцирует память на каждый чих )
.
всё ровно наоборот
Да, наоборот, ошибся. Так почему?)
Slava
потому что он 1) удобнее 2) достаточно быстр для любых задач 3) более функционален 4) поддерживаешься более широким наборот библиотек 5) более стабилен
Slava
можно и дальше продложать, вроде поддерживает http2 итд
Slava
какое?
Roman
какое?
Достаточно быстр для любых задач
Roman
Он либо для любых, либо достаточно быстр :)
Slava
хорошо, 99 процентов любых задач
Dmitri
Какой фреймворк посоветуете для написания апи, вот прям чтобы потом можно было и в продакшене юзать? Я пока на биго остановился, пользуется им кто-нибудь?
beego - монстр, имхо. Есть стандартный пакет, есть echo, есть chi. Для прода есть swagger+генерация, есть grpc с генерацией
Dmitri
а что это значит? немного не понял как в данной ситуации лучше поступить?
Запускаемый файл должен первой строчкой package main иметь
Anonymous
@CheshireKot я не помню ты или не ты говорил, но qml разве имеет зависимость на js ? К тому же сразу на v8?
Dmitri
@CheshireKot я не помню ты или не ты говорил, но qml разве имеет зависимость на js ? К тому же сразу на v8?
qml-движок носит внутри себя v8, который js-движок, и с ним работает
Dmitri
когда ты биндишь что-то из основного приложения, допустим, на C++, в QML-интерфейс, создается соответствующий js-объект, с которым твой интерфейс и работает
Oleg
Никак. Не работает оно
а чего так? хочу с клинта слать дельту по стандарту https://tools.ietf.org/html/rfc7386. как на сервере лучше всего с этим жить?
Oleg
Или с https://tools.ietf.org/html/rfc6902
Oleg
иначе придется слать на сервер всю сущность и на сервере вычислять дельту с вариантами 1) запоминать все версии сущностей, вычислять дельту по сравнению с нужной версией 2) придумывать блокировки на время редактирования 3) не придумывать блокировки и слать клиента лесом если он пытается изменить устаревшую версию.
Nazar
как можно преобразовать строку типа 20180805213000 +0300 в unix timestamp
heavycharged
почитайте доку к time пакету
heavycharged
там есть Parse и формат по которому парсить
heavycharged
в вашем случае parse будет что-то вроде time.Parse("20060102150405 -0700", yourVar), а затем time.Unix()
Oleg
Можно обычным POST на специальный location типа. /entity/delta
все придумали до нас. PATCH у REST для этого. И вопрос в том как с этим работать на сервере
V
руками 🙂
heavycharged
А в чем проблемы то с PATCH?
heavycharged
Можно определить структуру, в неё анмаршалить JSON, и написать метод Merge(entity *YourEntity) в которой сравнить все поля, и по очередно обновить, либо рефлексией.
Roman
А в чем проблемы то с PATCH?
В натягивании бизнес-логики на скудное количество http verbs
heavycharged
можно кодогенерацией решить такой кейс, если проблема все таки не в http verbs а в лени все это описывать
Oleg
Можно определить структуру, в неё анмаршалить JSON, и написать метод Merge(entity *YourEntity) в которой сравнить все поля, и по очередно обновить, либо рефлексией.
1) ты как делаешь? с клиента дельту получаешь или все состояние сущности? 2) как сохранение в базу у тебя выглядит?
V
put заменяет существующую сущность, patch меняет отдельные поля, не?
heavycharged
ну даже если дельту, нужно как-то связывать значение новый старый, например по ID, а дальше кодогенерацией создать if newEntity.Name != "" && newEntity.Name != oldEntity.Name { // добавляем в update значение }
heavycharged
а в чем вообще проблема обновить всю строку?
heavycharged
если уж раз с базой работаете?
heavycharged
https://github.com/imdario/mergo
heavycharged
вот структуры мерджить
heavycharged
https://github.com/evanphx/json-patch
heavycharged
а вот и json patch, но я думаю вы это видели