Задать вопрос
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    Go > PHP:

    1. Приложения, в которых на инициализацию тратиться очень много времени и это критично. Грубо говоря, когда умирающая модель выполнения не подходит.
    2. Приложения, в которых нужно много памяти для обработки.
    3. Приложения, в которых необходима мультипоточность и реализация задержек во времени.

    PHP > Go:

    1. Приложения, в которых важна скорость разработки, а производительность на втором плане.
    2. Приложения, в которых важна легкость горизонтального масштабирования. Грубо говоря там, где умирающая модель оптимальна.
    Ответ написан
    3 комментария
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    @mitya_k
    • Первая, причина, Go популярен за свою бедность синтаксиса, кому-то это нравится...
      Для больших компаний типа Google это плюс так, как можно посадить посадить 100500 программистов, которые вынуждены писать очень много однотипного болерплейта кода.
    • Вторая причина, там где требовалось решать низкоуровневые задачи, без бизнес-логики(например, много работать с байтиками), плюс требовалась многопоточность для этого приходилось использовать СИ++. Теперь есть простая альтернатива в виде Go. Опять же это актуально для больших компаний, где есть подобные задачи. Например, писать какой-нибудь парсер террабайтных логов
    • И последняя, можно сгенерить бинарь без зависимостей, что нравится работающим в DevOps, а для скриптования "богатый язык" особо не нужен. Опять же актуально для больших компаний, где есть большие отделы DevOps


    Из всех 3 пунктов вытекает зарплата и популярность в больших компаниях.
    Ответ написан
    Комментировать
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    Супер превосходства в производительности и не будет. Но при правильной архитектуре будет нормальное превосходство.
    В nodejs, например, чтобы распараллелить задачу на несколько ядер, нужно делать много доп. движений, вручную раскидывая задачи. В Go это делается автоматически и гораздо удобнее, просто используешь горутины, а рантайм сам беспокоится о том, запустить их конкурентно или параллельно. Ну и плюс, в го ты просто пишешь последовательный код, вместо колбэков, это легче.
    Строгая статическая типизация дает возможность вылавливать много проблем до релиза, код просто не скомпилится, вместо того, чтобы упасть в продакшне. Это очень критично для крупных проектов, над которыми работает много людей. Рефакторинг тоже проще по этой причине. Пхп и нода не дают такой возможности.
    Разработчики на го не редкие и не дорогие, они довольно быстро воспитываются из разработчиков на других языках, что тоже удобно компаниям. Плюс, код довольно стандартен, на го почти нет нескольких способов сделать одно и то же, он прививает единый подход.
    Сумма этих всех факторов и является причиной популярности го.
    Ответ написан
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Бенчмарки - это хорошо, но очень важно понимать что именно там меряли и почему результаты именно такие.

    Несколько лет назад я тоже делал бенчмарки Python, PHP, Node, Go.
    Для меня были важны две вещи:
    1 - скорость ответа сервера/кол-во запросов в секунду
    2 - объём сервиса в памяти, т.к. от этого зависит стоимость ресурсов

    На тесте, где сервисы не делали запросы в базу - из всех четверых лучше всего отработал Go с приличным отрывом, цифры, к сожалению, уже не помню.

    Но вся эта разница сошла на нет, как только добавился всего один простой SQL запрос в базу, в таблицу с 10 строками. И на этом фоне разница по скорости ответа была меньше 10%.

    Иными словами если ваш сервис работает с базой - критической разницы по скорости работы между Go/Rust/PHP/Node/Java, особо не будет.

    Другое дело если ваш сервис не будет делать запросы в базу, или будет кешировать результаты запросов, тогда вы почувствуете ощутимую разницу.

    Еще очень важно понимать сколько ваш скрипт потребляет ресурсов. Это становится критически важным, когда вы имеете дело с большими нагрузками.

    Один экземпляр Go занимал в памяти порядка 6мб RAM, при том, что Pytho+Django порядка 60мб.
    Node уже не помню сколько, но что-то близкое к Python'у.

    Вот тут уже, когда серверов у вас будет много - количество серверов с Go у вас будет в 10 раз меньше, соответственно расходы за эти сервера у вас будут в 10 раз меньше :)

    В крупных компаниях, где нужны специалисты по Go - там уже есть высокие нагрузки и переход на Go и поиск специалиста обусловлен необходимостью решить в первую очередь проблему с нагрузками, оптимизировать расходы на оборудование.

    Где-то читал статью, что у людей было API на порядка 40 серверов на Node, после переписывания на Go - серверов осталось два, из которых второй запасной :)
    Ответ написан
    13 комментариев
  • Есть ли видимая перспектива у Junior-а?

    Как по мне лучше всего подходит ваш последний вариант: изучить Go уже после PHP.
    Ответ написан
    Комментировать
  • Правильно ли делать сервис менеджер в Go?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    > В UserService может использоваться логика ProjectService'a. Для этого я передаю в userService.New(projectService ProjectService)

    По хорошему в UserService не должно быть логики ProjectService.
    Логику лучше не разносить по разным местам, такой код очень трудно потом поддерживать.
    Представьте, что через год придёт новый человек и внесёт правки в ProjectService, он может не знать/забыть внести нужные правки в UserService.

    Если без этого совсем никак, тогда лучше сделать 3й сервис, который в конструкторе примет сервисы Users и Project и будет вызывать нужные методы из каждого из них.

    В идеале нужно перестроиться и проектировать пакеты так, чтобы таких проблем не возникало.
    Но когда вы перестроитесь - результаты работы будут намного качественнее.
    Мне после Perl, Python понадобилось не мало времени чтобы перестроиться :))
    Но сейчас могу с уверенностью сказать оно того точно стоило!

    Подход как у вас с ServiceManager тоже используется, даже видел библиотеки готовые, но уже не помню как назывались. Я попробовал их, у меня не прижились эти библиотеки )

    Сейчас я использую такой подход:
    users/user.go
    тут описываю структуру Users, простая валидация полей, методы у структуры типа GetFullName и т.д.

    users/repo.go
    тут описываю интерфейсы:
    QueryRepo для извлечения данных
    CommandRepo для внесения изменения в данные пользователей
    репозитории используются только в рамках пакета users, другие пакеты используют интерфейсы сервисов

    users/querysvc.go
    тут описываю интерфейс QuerySvc (только для извлечения данных связанных с пользователей),
    он уже использует интерфейс QueryRepo
    этот пакет будут импортировать другие пакеты

    users/commandsvc.go
    тут описываю интерфейс CommandSvc (только для внесения изменений в данные пользователей), он тоже использует интерфейсы QueryRepo, CommandRepo
    этот пакет будут импортировать другие пакеты

    users/signupsvc.go
    это сервис регистрации пользователей, тут описываю интерфейс SignupSvc

    users/repos/mysql/query.go
    тут реализация интерфейса QueryRepo на MySQL
    этот пакет будет импортироваться только в пакете `app` (см. ниже)

    users/repos/mysql/command.go
    тут реализация интерфейса CommandRepo на MySQL
    этот пакет будет импортироваться только в пакете `app` (см. ниже)

    users/services/querysvc.go
    тут реализация интерфейса QuerySvc

    users/services/commandsvc.go
    тут реализация интерфейса CommandSvc

    users/services/signupsvc.go
    тут реализация интерфейса SignupSvc

    core/
    тут все константы, которые могут быть использованы в разных пакетах приложения (например коды ошибок)
    этот пакет могут включать любые пакеты, но он ничего не импортирует в рамках проекта

    app/
    тут иницализация всех репозиториев, сервисов, конфигов и т.д.
    здесь же происходит связывание всех пакетов.
    Т.е. что-то вроде
    usersQuerySvc := usersservices.NewQuerySvc(usersRepo, ...)
    usersSignupSvc := usersservices.NewSignupSvc(usersQuerySvc, usersCommandSvc)
    // например сервис для админов (с проверкой полномочий), методы которого уже можно использовать в endpoint'ax
    usersAdminSvc := usersservices.NewAdminSvc(usersQuerySvc, usersCommandSvc)
    
    projectSvc := projectservices.New(usersQuerySvc)

    Мне такой подход очень нравится тем, что нет скрытых зависимостей, всё видно как на ладони, кто и что использует.
    А если возникают сложности с применением такой схемы - для меня это верный признак того, что нужно спроектировать иначе, раз сложности уже возникли, значит в будущем их будет еще больше ))

    Ну и все пакеты как параметры принимают везде только интерфейсы.
    Хотя... с точки зрения Dependency Inversion, правильно бы было описывать под каждый пакет свой интерфейс, а не так, как я :), но я делаю интерфейсы очень маленькими, тогда получается очень гибко и, как мне кажется, после этого еще внутри других пакетов описывать интерфейсы уже избыточно в моём случае, работы больше, а толку не так много, по этому пока экономлю на этом время :)

    cmd/serve.go - импортирует app и запускает веб сервер например

    Если нужны будут еще какие то подробности - пишите, буду рад помочь
    Ответ написан
    Комментировать
  • Текущее положение Golang в машинном обучение?

    sgjurano
    @sgjurano
    Разработчик
    Можно запускать либы, написанные на C из Go, но зачем?

    Люди выбирают Go в основном из-за умного планировщика, который позволяет удобно работать с сетью. ML сюда не ложится примерно никак, тем более что большинство DS знают Python и это значит, что подходящих людей найти гораздо легче.

    Пожалуй единственная нормальная причина использовать ML-библиотеки на Go — это когда у вас уже есть сервис на Go, к которому надо прикрутить немножко ML.

    Если же вы пишете новый сервис, где планируется активное использование ML-библиотек, то для невысокой нагрузки прекрасно подойдёт Python, а для высокой лучше всё же сразу взять C++ или какой-нибудь другой язык прозрачно совместимый по памяти с C.

    Поэтому мне кажется, что ML-библиотеки на Go так и будут капитально отставать от Python — они там просто почти никому не нужны, вот их и не развивают.
    Ответ написан
    4 комментария
  • Как вызвать метод на блейзор клиенте?

    Ошибка говорит, что HttpClient в блазоре не поддерживает Proxy
    А в коде вашей либы есть такой код
    public RestClient(Uri baseUrl, JsonSerializer serializer, IWebProxy proxy = null)
            {
                BaseUrl = baseUrl;
                Serializer = serializer;
                DefaultQueryString = new List<KeyValuePair<string, string>>();
    
                MaxRetryCount = 0;
                Proxy = proxy;
    
                HttpClient = new HttpClient(new HttpClientHandler
                {
                    Proxy = proxy // Вот из-за этой строчки происходит падение.
                });
            }


    Есть три варианта решения:
    1. Сделать форк либы и поправить эту строку.
    Но не факт, что это единственная строчка, которая вызывает несовместимые API
    2. Вызывать этот код на сервере, а клиенту передавать только данные.
    3. Написать собственный клиент для imdb
    Ответ написан
    Комментировать
  • Как убрать No 'Access-Control-Allow-Origin' от CORS, если в URL нету знака вопроса?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В определённых случаях браузер делает preflight request. Сначала ресурс запрашивается методом OPTIONS, на который браузер рассчитывает получить ответ 200 с установленными CORS-заголовками. И только если этот запрос прошёл, то делается основной запрос.
    Проверьте, что ваш сервер нормально отвечает на OPTIONS.
    Ответ написан
    9 комментариев
  • Компиляция .NET приложения в машинный код?

    - Один выходной бинарник.
    - Скорость близкие к C++.
    - Запуск на машине "как есть" (без необходимости установки дополнительного по).

    Это достигается и без AOT.
    Скорость близкую к плюсам и так обеспечивает JIT-компилятор.
    Запуск на машине как есть - Self-contained.
    Один бинарник - Single File Executable

    Как на данный момент обстоят дела с данной технологией, есть ли подвижки в расширение поддерживаемых продуктов (не только UWP)?

    Вроде в .NET 6 обещают Full AOT
    Ответ написан
    Комментировать
  • Что лучше использовать Redux или Context?

    mbelskiy
    @mbelskiy
    Software Developer
    TLDR: Лучше использовать то, что подходит для решения конкретных задач в вашем приложении.

    В простом приложении сойдёт и контекст. Начнёт приложение разрастаться, контекста будет не хватать, начнешь накручивать логику. Получится свой редакс на минималках, но скорее всего с худшей реализацией.

    Голый редакс в 2021 лучше не брать. Смотри сразу в сторону redux-toolkit. Если нужен "стор" для кэша данных от веб-сервера, есть смысл посмотреть на redux-toolkit query, буквально неделю как релизнули.

    Хорошая статья по этой теме: https://blog.isquaredsoftware.com/2021/01/context-...
    Ответ написан
    2 комментария
  • Как ускорить mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Любые вопросы про "ускорение mysql" необходимо сопровождать не голословными заявлениями "Слющай, использует индексы, мамом клянус!", а ВЫВОДОМ EXPLAIN
    Без которого вопрос в принципе не имеет смысла, и должен удаляться.

    Плюс неплохо сразу выкатить результат SHOW ENGINE INNODB STATUS
    Ответ написан
    Комментировать
  • Какая среда разработки на JavaScript для продвинутых?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Что вам мешает самому почитать https://www.jetbrains.com/ru-ru/webstorm/

    Я вот непонял Вебшторм типа специально под JS создан или что?


    Кажется я понимаю в чем суть вашего вопроса )

    Sublime – это просто редактор кода. Может там и есть какие-то плюшки. но по минимуму.

    WebStorm – это IDE. Интегрированная среда разработки. Здесь уже не просто редактор с плюшками. А целый комбайн с функционалом на все случаи жизни.
    Ответ написан
    9 комментариев
  • Как реализуется вывод сообщения об отсутствии соединения?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    window.addEventListener('online', () => {
      // связь есть, скрыть уведомление
    });
    
    window.addEventListener('offline', () => {
      // связи нет, показать уведомление
    });
    Ответ написан
    2 комментария
  • Что использовать для Desktop UI на C#?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Ежели нужно что-то совсем хисптерское, кросс-платформенное, на переднем краю технологий, то MAUI конечно же.

    А если серьезно и у вас только windows то возьмите WPF.
    Ответ написан
    Комментировать
  • Как сделать плавный переход от прозрачности к непрозрачности элемента?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Это можно легко сделать при помощи -webkit-mask
    Ответ написан
    1 комментарий
  • Попадает ли блог под закон о просветительской деятельности?

    HanaK
    @HanaK
    Просто и понятно о финансах и налогах
    ст. 2, Федеральный закон от 29.12.2012 N 273-ФЗ (ред. от 30.04.2021) "Об образовании в Российской Федерации"
    Для целей настоящего Федерального закона применяются следующие основные понятия:
    35) просветительская деятельность - осуществляемая вне рамок образовательных программ деятельность, направленная на распространение знаний, опыта, формирование умений, навыков, ценностных установок, компетенции в целях интеллектуального, духовно-нравственного, творческого, физического и (или) профессионального развития человека, удовлетворения его образовательных потребностей и интересов и затрагивающая отношения, регулируемые настоящим Федеральным законом и иными нормативными правовыми актами Российской Федерации.
    (п. 35 введен Федеральным законом от 05.04.2021 N 85-ФЗ)

    Если строго по закону, то те, кто отвечает на вопросы - тоже типа просветители.
    И разговор в метро в каком магазине лучше картошку покупать - просветительская деятельность.
    И сайт Ваш уж тем более. Вы же собираетесь удовлетворять образовательные потребности, распространять знания и опыт?
    Пока рано говорить о правоприменении закона.
    Проект постановления правительства, реализующий резонансный закон о просветительской деятельности, будет доработан с учетом поступивших после общественного обсуждения предложений, сообщило Минобрнауки России.
    https://www.interfax.ru/russia/765999
    Ответ написан
    2 комментария
  • Возможно ли после написания класса его само объявление?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    class Main {
      static x = 10;
    }
    Main.x // 10

    class Main {
      x = 10;
    }
    (new Main).x // 10
    Ответ написан
    2 комментария