• Go Meetup в Acronis! (Москва, Физтехпарк)



      Друзья, привет!

      Приглашаем вас стать участниками Acronis Go Meetup, который состоится 28 февраля в офисе компании Acronis — в Физтехпарке (г. Москва, Долгопрудненское шоссе, д.3). Специально по этому случаю будет организован трансфер от станции метро Алтуфьево, а также возвращение в город после мероприятия.
      Читать дальше →
    • Когда отвечаешь за качество подарка. История одного блокчейн-эксперимента

        На одном из мозговых штурмов нашей команды в Digital Transformation Group (DTG), посвященных развитию нашей блокчейн-системы Tracelabel, родилась идея: что если традиционные подарки клиентам и партнерам будут сами о себе рассказывать?

        А ведь и правда! Это может вызвать любопытство клиентов и, главное — позволит нам показать возможности блокчейна многим людям. А еще мы сможем понять конверсию контакта через такой вид коммуникации с клиентом.

        Так и появилась концепция нашей новогодней акции, которую решили провести для клиентов группы компаний ЛАНИТ, куда входит DTG. Итак, подарки в одночасье стали «умными», а мы получили любопытную статистику, с которой я познакомлю вас в этой статье. Впереди — череда гендерных праздников. Надеемся, что наши идеи вдохновят читателей ланитовского блога на Хабре.

        Источник
        Читать дальше →
        • +48
        • 1,8k
        • 7
      • Проводим ревизию ошибок

        • Перевод

        Часто используемый контракт для функций, которые возвращают значение ошибки интерфейсного типа, заключается в том, что вызывающая сторона не должна ничего знать заранее о состоянии других значений, возвращаемых этим вызовом, без предварительной проверки ошибки.


        В большинстве случаев значения ошибок, возвращаемые функциями, должны быть непрозрачными для вызывающей стороны. То есть тест, в котором ошибка равна nil, показывает, был ли вызов успешным или неудачным, и это все, что нужно сделать.



        картинка отсюда

        Читать дальше →
      • Освобождаемся от обработки ошибок, устраняя ошибки

        • Перевод


        Go2 имеет целью уменьшить накладные расходы на обработку ошибок, но знаете ли вы, что лучше, чем улучшенный синтаксис для обработки ошибок?

        Не нужно обрабатывать ошибки вообще. Я не говорю «удалите ваш код обработки ошибок», вместо этого я предлагаю изменить ваш код так, чтобы у вас не было много ошибок для обработки.

        Эта статья черпает вдохновение из главы «Define Errors Out of Existence”» книги « A philosophy of Software Design» Джона Оустерхаута. Я постараюсь применить его совет к Go.
        Читать дальше →
      • Пишем учебное приложение на Go и Javascript для оценки реальной доходности акций. Часть 2 — Тестирование бэкенда

        • Tutorial
        В первой части статьи мы написали небольшой веб-сервер, который является бэкендом для нашей информационной системы. Та часть не была особенно интересной, хотя и демонстрировала использование интерфейса и один из приёмов работы с горутинами. И то и другое может быть интересно начинающим разработчикам.

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


        картинка отсюда
        Читать дальше →
      • Пишем учебное приложение на Go и Javascript для оценки реальной доходности акций. Часть 1 — backend

        Давайте попробуем написать небольшую тренировочную, но вполне себе законченную информационную систему, состоящую из серверной части на Go и клиентского веб-приложения на Javascript + Vue JS.

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

        • Деньги съедает инфляция (инфляционный риск)
        • Рубль может обесцениться (курсовой риск)

        Было принято решение изучить вопрос и выбрать подходящий инструмент для инвестирования. Основными критериями были надёжность и защита сбережений от указанных выше рисков.
        Вопрос я изучил и в результате пришёл к выводу, что единственным адекватным инвестиционным инструментом для жителя России являются акции биржевых фондов (ETF), причём именно те, что торгуются на Московской Бирже.

        Таким образом, предлагаю написать учебное приложение, которое бы показывало доходность всех ETF, которые представлены на Московской Бирже.
        Читать дальше →
        • +16
        • 4,8k
        • 4
      • Давайте поговорим о ведении логов

        • Перевод
        Этот пост вдохновлен темой в форуме Go Forum, начатой Nate Finch. Этот пост сконцентрирован на языке Go, но если пройти мимо этого, я думаю, идеи представленные тут широко применимы.

        Почему нет любви?


        Пакет log в Go не имеет уровней для логов, вы можете сами вручную добавить приставки DEBUG, INFO, WARN, и ERROR. Также logger тип в Go не имеет возможности включить или выключить эти уровни отдельно для выбранных пакетов. Для сравнения давайте глянем на несколько его замен от сторонних разработчиков.

        image

        glog от Google имеет уровни:

        • Info
        • Warning
        • Error
        • Fatal (завершает программу)

        Посмотрим на другую библиотеку, loggo, разработанную для Juju, в ней доступны уровни:

        • Trace
        • Debug
        • Info
        • Warning
        • Error
        • Critical

        Loggo также имеет возможность задать уровень детализации лога для нужных пакетов по отдельности.

        Перед вами два примера, явно созданных под влиянием других библиотек для логирования на других языках.

        Фактически их происхождение можно проследить до syslog(3), возможно, даже раньше. И я думаю, что они не правы.

        Я хочу занять противоречивую позицию. Я думаю, что все библиотеки журналов плохи, потому что предлагают слишком много функций; ошеломляющий набор возможностей, который ошеломляет программиста прямо в тот момент, когда он должен ясно думать о том, как общаться с читателем из будущего, с тем, кто будет просматривать эти журналы.

        Я утверждаю, что для успешных пакетов логов требуется гораздо меньше возможностей и, конечно, меньше уровней.
        Читать дальше →
      • Повышаем информативность ошибок в Go – github.com/ztrue/tracerr

          После многолетнего опыта работы с php и js, я привык иметь в ошибках стектрейс и смотреть на место, где произошла ошибка прямо из эррор-репорта. Пересев на Go пару лет назад, я был несколько удивлен, что в Go другие правила и нужно угадывать стектрейс по какой-нибудь строке типа `invalid character`. А если она произошла на проде и не известно, как ее воспроизвести, то это превращалось в целый аттракцион.

          Поскольку я уверен, что не один от этого страдал, то сделал пакет, который умеет так:

          golang error output

          GitHub
          Читать дальше →
        • Всегда ли Node.js будет медленнее, чем Golang?

          • Перевод
          Возникает такое ощущение, что буквально каждую неделю появляется новый «веб-фреймворк» для Node.js, который называют чем-то таким, что работает быстрее, чем всё, что было до него. Всем известно, что Express — это медленно, но способен ли очередной фреймворк по-настоящему улучшить производительность подсистемы ввода-вывода Node.js? Единственное, что он может — это устранить чрезмерную нагрузку на систему, создаваемую Express. Об улучшении чего-то фундаментального речи не идёт. Собственно говоря, для того, чтобы кардинальным образом улучшить ситуацию, нужно работать на более глубоком уровне, а не добавлять новые абстракции поверх Node.js.

          image

          Что нужно для того, чтобы на платформе Node.js можно было бы создавать серверные приложения, работающие гораздо быстрее чем всё то, что есть сегодня?
          Читать дальше →
        • Создание архитектуры для нового высоконагруженного стартапа в 2019

          Цель — создание нового высоконагруженного стартапа в современных условиях. Создание архитектуры будем рассматривать на примере Billingolang — проект универсального биллинга, общего назначения, написанный на golang. Проект включает в себя доступ через API, сайт, интеграцию в бухгалтерские системы, отчеты и графики.

          Изначально были откинуты однопоточные системы. Выбирать пришлось между Erlang, Golang и Rust. Основным языком программирования был выбран Golang, потому что найти программистов на Erlang сложно, хотя устойчивость и горячая замена кода шли в плюс Erlang. Rust, же не смотря на формальное отсутствие состояния гонки, все-таки более подходит не для написания приложений, но драйверов и операционных систем.

          Обмен сообщениями между компонентами системы происходит не на классическом RabbitMQ, а на NATS — последний показал бенчмарки на сервере который сейчас используется, 1M сообщений (+360К при кластеризации) в секунду против 40К у зайца. Да и кластеризуется он быстрее и легче чем RabbitMQ.

          База данных: MySQL InnoDB Сluster 7.6 (MySQL server 8.0). Шикарно верстается и отлаживается комьюнити средством MySQL Workbench.
          Читать дальше →

        Самое читаемое