Ответы пользователя по тегу Go
  • Golang и highload

    voidnugget
    @voidnugget
    Программист-прагматик
    1 - гораздо короче цикл разработки, хорошо проработан инструментарий и конкретные подходы к разработке, по сравнению с JVM языками и Rust / Python
    2 - надо уметь в кодогенерацию, очень много кодогенерации... потому вопросы все решаются "шаблонно" и зависят от количества уже существующих наработок и качества выработки подходов к разработке
    3 - быстрое TDD, относительно большое количество стабильных библиотек аналогов которых нет в других языках, есть подходы типа zero-alloc (0lloc) и gc-less конкретно для highload'a (стоит глянуть как работает fasthttp и как там происходит аллокация, на пулах и с ресайзом слайсов), в случае с JVM надо там во всякие disruptor'ы уметь и прочий морально устаревший бред... jmh не умеет нормально полить аллокации и мониторинг GC тоже местами поверхностный, а объектная модель незаурядно раздута (привет Project Panama).
    С недостатков - монолитный и топорный Runtime, а 99% поделок сообщества и правок просто обесцениваются и игнорируются... тяжко, например, там какой-нить F-Stack прикрутить и т.д. без допилки компилятора и рантайма. Хотя в случае с JVM это почти невозможно. Про Python/Rust не могу сказать.
    Ответ написан
    Комментировать
  • Формат ошибок в GraphQL?

    voidnugget
    @voidnugget
    Программист-прагматик
    GraphQL не привязывается к REST'у... по этому специфические заголовки и статусы ответов не используются.
    Коды ошибок сервера обрабатываются как часть GraphQL схемы. Сам GraphQL разрабатывался для любых транспортов, не только HTTP1&2, что бы его можно было гонять, допустим, там под WebSocket'aми или вообще под каким-нить rtmfp или любым другим кастомным протоколом.

    Это как шутка про REST:
    "Когда вы в последний раз видели HEAD запрос с range заголовками и статус ответа 206 (Partial Content) ?"
    "Это и определяет степень познания и ответственность современных хипстеров в разработке программного обеспечения"

    Я не советую использовать родную golang либу - она не соответствует последним спецификациям и плохо работает что с relay что с apollo.

    p.s. rest никто толком не знает ;)
    Ответ написан
  • Go reflection interface{}?

    voidnugget
    @voidnugget
    Программист-прагматик
    В качестве самого хорошего примера сереализации советую рассмотреть ffjson. Обычно, рефлексией читают поля структуры и их аннотации и опосля кэширует их, ffjson напротив идёт путём кодогенерации. В некоторых случаях (с использованием интерфейсов в структурах) этот подход может быть ещё медленнее чем родной Marshal(), а для большей части прикладных задач, ещё и с использованием SIMD инструкций с SSE4 или SSE2 при работе со строками, получается сравнительно быстро. Ещё стоит глянуть исходники gob энкодера и декодера и почитать статью.
    Ответ написан
    Комментировать
  • Конвертер из Ruby в Go возможно ли?

    voidnugget
    @voidnugget
    Программист-прагматик
    Нет.
    Ответ написан
    Комментировать
  • Какую IDE выбрать для Go?

    voidnugget
    @voidnugget
    Программист-прагматик
    У delve интеграция с IDE' пока только в планах.
    С GDB бывает немного сложновато, у Atom'a нет его поддержки, есть SublimeGDB - ним можно пользоваться, ну и конечно же у emacs / vim тоже куча плюшек.
    Ответ написан