Люблю Go, люблю его хвалить (бывает даже, привираю слега), люблю о нем статьи. Прочитал статью “Go: Два года в продакшне ”, потом комменты. Стало понятно, на хабре — оптимисты! Хотят верить в лучшее.
Читать полностью »
Метка «golang» - 2
Go: многопоточность и параллельность
2013-09-27 в 19:08, admin, рубрики: benchmark, golang, метки: benchmark, golangEazyPhoto: уютный фотохостинг для своего сервера
2013-08-06 в 5:32, admin, рубрики: golang, php, Веб-разработка, фотохостинг, метки: golang, фотохостингВ недалекие времена, когда flickr ещё не предлагал терабайт под хранение фотографий, а BitTorrent Sync только вышел на экраны интернета в своей небезопасной альфа-версии, была у меня потребность: делиться фотографиями с друзьями и не только. Но как обычно у программистов это бывает, под словом «делиться» стоит гораздо больше, чем выложить фоточки во ВКонтактик. А именно:
- Выложить куда-нибудь фотографии на свой сервер с красивым и простым web-интерфейсом.
- Просто и массово заливать и скачивать оригиналы изображений.
- Иметь возможность разграничить доступ к определенным альбомам.
- Попытаться связать это с локальным сетевым хранилищем, чтобы не дублировать фотографии.
- По возможности удалять оригиналы фотографий с сервера через какое-то время и оставлять только фотографии с измененным размером.
- По-максимуму бесплатно! :)
После таких мыслей в голове начинает зарождаться идея: «Надо накреативить...» — и ты уже не можешь остановиться.
Читать полностью »
Golang daemon
2013-07-24 в 9:14, admin, рубрики: daemon, golang, linux, метки: daemon, golang, linux, nixОколо года назад мне понадобилось написать linux демона, реализующего небольшой сетевой сервис. В то время я активно изучал Go и мне очень нравился этот язык, поэтому взвесив все за и против я решил реализовать задачу на нем. К тому же, Go уже был стабильным и имел версию 1.0.1.
О том, с какими подводными камнями мне пришлось столкнуться, читайте под катом, но сразу оговорюсь: я буду описывать только тонкости реализации демона на Go. Если вы слабо представляете что такое «демон» или как демонизируется процесс, сначала стоит об этом почитать, поискав в гугле или на хабре «linux daemon» или пройдясь по списку ссылок в конце статьи.
Читать полностью »
Нагрузочный тест c помощью Go
2013-07-19 в 19:17, admin, рубрики: golang, jmeter, Программирование, метки: golang, jmeter Добрый день, Хабрахабр.
Вы, вероятно, знакомы с JMeter. Если в кратце — очень удобный инструмент для проведения нагрузочного тестирования, имеет огромный функционал и много-много полезных фишек. Но статья не о нем.
С чего началось
В нашем проекте есть довольно нагруженный узел, JMeter помогал долгое время. Проффилирование и оптимизации дали свой профит, но все уперлось в маленькую проблему. JMeter не мог создать очень большой трафик, а если более точно, то после 10 секунд нужного нам режима, происходил OutOfMemory и тестирование прекращалось, в некоторых случаях проблемы не было, но скорость отправки запросов заметно уменьшалась, при этом загрузка CPU — 400%, решалось перезапуском программы. Пользоваться было крайне не удобно.
Итак, мы имеем проблему, и ее нужно решить, первое, что пришло в голову — сделать свой мини-тест, отвечающий минимальным требованиям. Давно было интересно попробовать Go на вкус. Так родилось приложение go-meter. При написании возникало очень много вопросов, ответов на которые либо не было, либо они не объясняли проблему, поэтому я решил поделиться опытом и примером рабочего кода, если Вам интересно, прошу подкат.
Читать полностью »
Реализация взаимодействия нескольких сайтов на Python c сайтом на Go
2013-06-15 в 10:33, admin, рубрики: golang, json, python, Программирование, метки: golang, json, pythonВ данной статье хочу рассказать про реализацию системы единого входа на форумы “Сети Знаний”.
Входные данные. Имеется система форумов вопросов и ответов, движок которых написан на Python. Каждый форум — это отдельное веб-приложение со своей базой данных. Все форумы работают из одних исходников.
Задача. Реализовать возможность входа пользователей на форумы, на которых они еще не зарегистрированы, по имеющимся данным с другого форума.Читать полностью »
Обзор GORP — ORM для языка Go
2013-06-08 в 11:18, admin, рубрики: golang, Программирование, метки: golangВ предыдущей статье (http://habrahabr.ru/post/178963/) я рассказывал как работать с базой данных на Go. В комментариях к посту мне посоветовали посмотреть две библиотеки ORM.
Вообще, если говорить о работе с базой данных в Go, то самым простым способом будет представление структуры данных в виде массива или словаря. Сериализация в этом случае будет очень простой, но работа с такими типами данных в коде не выглядит привлекательной. Конечно, можно добавить обертки и т. д, но если посмотреть на архитектуру любого подобного решения, то так или иначе вырисовывается ORM.
В обеих предложенных библиотеках я не нашел всего необходимого функционала. Читать полностью »
Крэши, вызванные исключениями
2013-04-26 в 17:32, admin, рубрики: exceptions, golang, перевод, переводы, Песочница, метки: exceptions, golang, переводНа прошлой неделе я вместе с несколькими моими коллегами учавствовал в громкой речи о том факте, что Go обрабатывает ошибки в ожидаемых сценариях посредством возвращения кода ошибки вместо использования исключений или другого схожего механизма. Это довольно спорная тема, потому что люди привыкли избегать ошибки с помощью исключений, а Go возвращает улучшенную версию хорошо известной модели, ранее принятой несколькими языками — включая C — при которой ошибки передаются через возвращаемые значения. Это значит, что ошибки маячат перед глазами программиста и вынуждают иметь с ними дело все время. Кроме того, спор переходит в направление того факта, что в языках с исключениями каждая ошибка безо всяких дополнительных действий несет в себе полную информацию о том, что и где произошло, а это может быть полезно в некоторых случаях.Читать полностью »
Новогодний батл «Деда Мороза» и Санта-Клауса, а также пара слов о Golang
2012-12-29 в 6:35, admin, рубрики: golang, Новый Год, я пиарюсь, метки: golang, Новый Год Еще в преддверии прошлого нового года родилась у меня одна сумасшедшая идея: новогодний батл «Деда Мороза» и Санта-Клауса, но волей судеб проект так и не удалось запустить, хотя домен был куплен, а проект был практически готов. Прошел год, появилось чуть-чуть свободного времени и я решил все-таки довести сайт до ума и пустить в свободное плаванье.
Читать полностью »
Какая команда в консоли отнимает у вас больше всего времени?
2012-09-14 в 9:12, admin, рубрики: golang, linux, shell, UNIX, метки: golang, shell, unixУ меня — 'cd'.
Хожу по папкам часто и начал замечать, что даже автодополнение не спасает. Тогда я начал искать возможные способы упрощенной навигации в консоли.
Но должны же быть решения!
В моей любимой оболочке zsh есть такая возможность — «разворачивание» путей по нажатию <Tab>
: например, "/u/in/sy" -> "/usr/include/sys/"
В остальных оболочках можно приноровиться и использовать $CDPATH
или pushd/popd
, но лично мне это до сих пор кажется неудобным.
А еще есть пара утилиток для ускоренной навигации. Самая известная из них, пожалуй, autojump. Она следит в каких папках пользователь проводит больше всего времени и позволяет указывать только фрагмент пути к папке. Например «incl» приведет вас в "/usr/include", если вы там часто бываете.
Autojump вдохновила другого разработчика на создание утилиты «z». «Z» использует в качестве критерия для перехода т.н. «frecency» — комбинацию частоты посещений папки (frequency) и времени последнего перехода туда (recency).
Обе утилиты хороши по-своему, и я так бы и пользовался autojump или z, однако что-то мне не давало покоя. А недавно я услышал одну фразу:
If the product is used as a tool, its interface should be as unintelligent as
possible. Stupid is predictable; predictable is learnable; learnable is usable.
И тут я понял что самое время придумать свой велосипед. Не-intelligent. Тупой и удобный.Читать полностью »
Горутины: всё, что вы хотели знать, но боялись спросить
2012-04-11 в 8:57, admin, рубрики: golang, goroutine, scheduler, планировщик, Программирование, метки: golang, goroutine, scheduler, планировщикВ этой статье я постараюсь кратко и емко рассказать что такое горутины, когда стоит их использовать, какое отношение они имеют к системным потокам, а так же как работает планировщик.
Что за горутины?
Горутина (goroutine) — это функция, выполняющаяся конкурентно с другими горутинами в том же адресном пространстве.
Запустить горутину очень просто:
go normalFunc(args...)
Функция normalFunc(args...)
начнет выполняться асинхронно с вызвавшим ее кодом.
Обратите внимание, горутины очень легковесны. Практически все расходы — это создание стека, который очень невелик, хотя при необходимости может рости.
Сколько вешать в граммах?
Чтобы было проще ориентироваться, рассмотрим цифры полученные опытным путем.
Читать полностью »