Посты с тэгом go


Пирожки в Go



В продолжение эпопеи с дистрибутивно-семантическими пирожками (и в погоне за модными тенденциями) решил переписать веб-сервис с лапидарного Питона на прогрессивный Go. Заодно был вынужден перенести и всю «интеллектуальную» часть (благо, не бином Ньютона). Сделать это оказалось куда проще и приятней, чем предполагал в начале. Впрочем, на медово-синтаксическом празднике жизни не обошлось без ложки дёгтя — самая быстрая гошная «числодробилка», какую смог найти (mat из gonum) таки уступила по скорости питоновской связке numba + numpy.
Читать дальше →


Пирожки в Go



В продолжение эпопеи с дистрибутивно-семантическими пирожками (и в погоне за модными тенденциями) решил переписать веб-сервис с лапидарного Питона на прогрессивный Go. Заодно был вынужден перенести и всю «интеллектуальную» часть (благо, не бином Ньютона). Сделать это оказалось куда проще и приятней, чем предполагал в начале. Впрочем, на медово-синтаксическом празднике жизни не обошлось без ложки дёгтя — самая быстрая гошная «числодробилка», какую смог найти (mat из gonum) таки уступила по скорости питоновской связке numba + numpy.
Читать дальше →


[Перевод] Вызов функций Go из других языков


С версии 1.5 компилятор Go поддерживает несколько режимов сборки, определяемых флагом buildmode. Их ещё называют режимами исполнения Go (Go Execution Modes). С их помощью go tool может компилировать пакеты Go в нескольких форматах, включая архивы и библиотеки общего пользования Go (shared libraries), архивы и библиотеки общего пользования Си, а с версии 1.8 — и динамические плагины Go.


В статье мы рассмотрим компилирование пакетов Go в библиотеки Си. В этом режиме сборки компилятор генерирует стандартный бинарный файл объекта (shared object) (.so), передавая функции Go в качестве API в стиле Си. Мы поговорим о том, как создавать библиотеки Go, которые можно вызывать из C, Python, Ruby, Node и Java.


Весь код доступен на



Centrifuge + Go = Centrifugo – harder, better, faster, stronger




В сентябре прошлого года была опубликована последняя статья о Центрифуге — сервере с открытым исходным кодом для обмена сообщениями в режиме реального времени. Теперь в списке хабов, в которые публикуется этот пост, присутствует Go. И неспроста, как можно понять уже из заголовка, Центрифуга была портирована с Python на Go — так появилась Centrifugo. О причинах миграции, о плюсах и минусах Go, а также о том, как эволюционировал проект с момента предыдущей публикации – читайте под катом.
Читать дальше →


Когда стоит использовать Go?

Понятное дело, что это мой личный блог, и потому этот дисклеймер в теории писать нет смысла, но на практике я всë равно напомню - всë, что я тут пишу, это мои личные мысли, если не указано обратное (что это факты или мысли кого-то другого, скажем).

Так вот, когда? TL;DR: никогда.

Длинный вариант: если вам прямо сейчас нужно что-то скомпилированное и ждать Rust 1.0 нет сил, а OCaml выучить нет времени, то ок, конечно же, right tool for the job и всë такое (впрочем, мне кажется, что вы себя обманываете).

Во всех остальных случаях - уже можно взять Rust, они перестали менять весь язык полностью, и он уже рабочий, либо возьмите уже OCaml, не настолько он отличается. Единственный плюс Go перед этими языками - что в нëм может разобраться Python-программист за один вечер.

Горутины с каналами? В Rust есть green и std::comm, в Ocaml’е есть Lwt и Async. Типизация? Посмешище в Go типизацие



Когда стоит использовать Go?

Понятное дело, что это мой личный блог, и потому этот дисклеймер в теории писать нет смысла, но на практике я всë равно напомню – всë, что я тут пишу, это мои личные мысли, если не указано обратное (что это факты или мысли кого-то другого, скажем).

Так вот, когда? TL;DR: никогда.

Длинный вариант: если вам прямо сейчас нужно что-то скомпилированное и ждать Rust 1.0 нет сил, а OCaml выучить нет времени, то ок, конечно же, right tool for the job и всë такое (впрочем, мне кажется, что вы себя обманываете).

Во всех остальных случаях – уже можно взять Rust, они перестали менять весь язык полностью, и он уже рабочий, либо возьмите уже OCaml, не настолько он отличается. Единственный плюс Go перед этими языками – что в нëм может разобраться Python-программист за один вечер.

Горутины с каналами? В Rust есть green и std::comm, в Ocaml’е есть Lwt и Async. Типизация? Посмешище в Go типизацие



Error handling in Go

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

И совсем необычный метод в языке Go!

Defer начинает работать, как только происходит выход из этой функции. Открыли файл - если никаких ошибок не словили - закрываем. Очень сильно похоже на With в Python. А вот что касается Panic… как уже стало понятно из названия, она просто паникует, блокирую процессы вверх по стеку. То есть, если мы поместим ее в main(), то она аварийно приостановит работу программы.



Why I started to learn Go language?

Не спорю, Python - это очень крутой, мощный и высокоуровневый язык, с помощью которого можно писать веб-сервисы, скрипты для автоматизации процессов в ОС и даже монтировать видео - этот список, на мой взгляд, можно продолжать бесконечно. Но у него есть один огромный минус - он медленный. Также, в нем напрочь отсутствует полноценная многопоточность.

Поэтому для боевых задач мне могут понадобится язык, который не построен на Си, в отличие от Python, а компилируется в байт-код. К тому же, на данный момент есть только 1 язык стабильной версией, большим сообществом и достаточной финансовой поддержкой компанией, многопоточность которого уже вшита в язык. Кто еще не догадался - встречайте Go!

В нем есть очень много интересных вещей, описание которых просто напросто не уместится в одном посте, поэтому по традиц



Локальный Continuous Integration сервер

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

Принцип работы у всех примерно один:
  • скачать код
  • создать окружение
  • установить (собрать) код
  • запустить и протестировать
  • отправить уведомление
Это можно сделать самостоятельно, например при помощи fabric, cron, chroot или docker или при помощи готовых CI серверов:


Локальный Continuous Integration сервер

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

Принцип работы у всех примерно один:
  • скачать код
  • создать окружение
  • установить (собрать) код
  • запустить и протестировать
  • отправить уведомление
Это можно сделать самостоятельно, например при помощи fabric, cron, chroot или docker или при помощи готовых CI серверов: