🏁Александр
и передать по ссылке notStruct в анмаршел
🏁Александр
но такое не кашерно 🙂
Oleg
понятно, видимо стоит прежде чем лезть сразу во всякие фреймворки которые "позволяют", посмотреть на стандартные либы) судя по всему в go c ними хорошо)
фреймворк это всегда надстройка над чем-то, поэтому от использования фреймворков не уйти никак, если эт конечно не хелловорлд. В конечном итоге Вы или будете использовать чей-то или напишите свой.
Anatoliy
не, от такого у меня спагетти в итоге будет, проект новый, можно сразу делать хорошо
🏁Александр
ну вот не согласен 🙂 Пишу на чистом, все хорошо. Голову надо включать
Anatoliy
ну вот не согласен 🙂 Пишу на чистом, все хорошо. Голову надо включать
у меня версии API будут, причем будут меняться, на чистом будет не очень
🏁Александр
не, от такого у меня спагетти в итоге будет, проект новый, можно сразу делать хорошо
ВНИМАТЕЛЬНО! просмотрите все стандартные пакеты, там много вкусного. Даже http клиент есть (для получения, аля CURL), db интерфейсы уже есть
Oleg
ну вот не согласен 🙂 Пишу на чистом, все хорошо. Голову надо включать
эм, не знаю, писать ORM или свою библиотеку для работы с БД , эт не каждый осилит. Ровно как и работу с jwt.
Anatoliy
так echo вроде не может стандартные хендлеры? или на это пофигу?
Anatoliy
эм, не знаю, писать ORM или свою библиотеку для работы с БД , эт не каждый осилит. Ровно как и работу с jwt.
да jwt то оказалась вообще элементарной из того что я по ней увидел. а вот ORM да, щас вряд ли потяну, или будетслишком долго
Anatoliy
плюс желательно в совершенстве владеть sql для той субд с которой будет работать ORM, тут у меня точно будет проблема, толкьо хочу попробовать postgres
🏁Александр
да jwt то оказалась вообще элементарной из того что я по ней увидел. а вот ORM да, щас вряд ли потяну, или будетслишком долго
я бы все таки для апи не рекомендовал накручивать фрейворк 🙂 В крайне случаи потом попробуете. Потеря производительности будет
🏁Александр
такая ощутимая, за счет всякие рефлексий которые туда накручивают
Anatoliy
я бы все таки для апи не рекомендовал накручивать фрейворк 🙂 В крайне случаи потом попробуете. Потеря производительности будет
хм.. тоже верно, в конце концов тут надо то минимум от роутов по сути, просто post/get/.. и прием в json
🏁Александр
попробуйте на стандартном пакете net/http
Anatoliy
попробую, кстати никто не прикручивает к своим проектам метрики для прометеуса? там уже точно либу придется пользовать
🏁Александр
хендлеры-структуры должны реализовывать всего 1 интерфейс http.Handle c 1 методом
Kirill
такая ощутимая, за счет всякие рефлексий которые туда накручивают
должно быть достаточно большое количество rps чтоб начать чувствовать оверхед от reflection
🏁Александр
ну правда не на роуте
Anatoliy
должно быть достаточно большое количество rps чтоб начать чувствовать оверхед от reflection
в теории - 3-7к обращений в секунду, не много в принципе, но если будет все совсем хорошо то еще раза в два может быть больше, переписывать потом не хочется
🏁Александр
раньше пробегало за 30 мс по 1000 итераций, теперь за 3.6 мс
🏁Александр
в рамках 1 гоурутины
🏁Александр
я коллекцию разбирал рефлексией, хотел орм делать 🙂
🏁Александр
но отговорили, сделал просто тупо фабрикой
🏁Александр
да "кондово", но зато как быстро
Anatoliy
я коллекцию разбирал рефлексией, хотел орм делать 🙂
а c/c++ код через рефлексию можно в go стартовать?
Kirill
раньше пробегало за 30 мс по 1000 итераций, теперь за 3.6 мс
за 3.6 секунды мы с рефлексией и прочим ~5k ответов с контейнера отдаем, причем на каждый реквест мы еще и метрики отправляем и лог событий пишем
🏁Александр
а c/c++ код через рефлексию можно в go стартовать?
забудьте про рефлексию, если нужна рефлексия вы делаете что-то не то 🙂
Kirill
т.е. разница по времени 3 порядка?
это в "попугаях", наша нормальная, а не пиковая нагрузка, нельзя что-то в вакууме померять
Anatoliy
забудьте про рефлексию, если нужна рефлексия вы делаете что-то не то 🙂
хорошо, поясню, можно не рефлексией, но как по другому - не знаю. в общем иногда код обработчика может меняться(дополняться обычно, но изменение тоже возможно), надо иметь возможность не перезапуская приложение его подцепить, код обычно на с/с++
Kirill
3.6 СЕКУНДЫ? 🙂
примерно так, у нас получается в среднем по ~1.2к rps на контейнер, где-то больше, где-то меньше
Anatoliy
а вообще имеет смысл приложение на go связывать с кодом на c/c++ ?
Kirill
нет
Anatoliy
математические операции, включая побитовые на go выполняются со скоростью равной тому же на c/c++ или быстрее/медленнее?
Daniel
этот вопрос смысла не имеет
Daniel
медленно выполняются не операции, а загрузка данных из памяти в кеш
Anatoliy
меня интересует "в общем", так то понятно что смысла не имеет
Daniel
в общем - процессор тот же, и математика та же
Daniel
у go сильно хуже оптимизатор
Oleg
https://benchmarksgame.alioth.debian.org/u64q
🏁Александр
меня интересует "в общем", так то понятно что смысла не имеет
на самом деле для горячей перезагрузки делают просто прокси
🏁Александр
на гоу есть реализация
Anatoliy
да я уже сообразил как это можно вынести, просто еще один слой микросервисов придется делать
🏁Александр
https://habrahabr.ru/post/318896/
🏁Александр
можете почитать
🏁Александр
но это все из серии "странное"
Anonymous
Ребята. Кто то сталкивался со странным поведением exec модуля. Когда в аргументах команды есть одинарные кавычки то она не выполняетя. Как это победить?
🏁Александр
экранировать?
Anonymous
экранировать?
Не помогает
Daniel
ну так же не бывает
Anonymous
ну так же не бывает
Ну вот бывает:)
Daniel
нет
Daniel
не бывает
Anonymous
Например find -regex 'regexp'
Anonymous
Вот такое тупо фейлится
Daniel
очен хорошо
Daniel
сколько надо аргументов передать exec.Command()?
Daniel
и нужны ли на самом деле тут кавычки?
Daniel
(это наводящие вопросы)
Anonymous
Нужны ибо пробелы. Около 8
Daniel
что - около 8,
Daniel
и где тут пробелы?
Anonymous
Аргументов
Daniel
и зачем кавычки?
Daniel
это все наводящие, опять же вопросы
Anonymous
Ну в експрешене же. Там где регекс. Там пробелы внутри могут быть
Anatoliy
двойные кавычки не сработают вместо одинарных?
Daniel
коллеги
Daniel
остановитесь
Юрий
exec.Command("cmd", "/C", "shutdown", "/s").Run()