На прошлой неделе я вместе с несколькими моими коллегами учавствовал в громкой речи о том факте, что Go обрабатывает ошибки в ожидаемых сценариях посредством возвращения кода ошибки вместо использования исключений или другого схожего механизма. Это довольно спорная тема, потому что люди привыкли избегать ошибки с помощью исключений, а Go возвращает улучшенную версию хорошо известной модели, ранее принятой несколькими языками — включая C — при которой ошибки передаются через возвращаемые значения. Это значит, что ошибки маячат перед глазами программиста и вынуждают иметь с ними дело все время. Кроме того, спор переходит в направление того факта, что в языках с исключениями каждая ошибка безо всяких дополнительных действий несет в себе полную информацию о том, что и где произошло, а это может быть полезно в некоторых случаях.Читать полностью »
Рубрика «golang» - 35
Крэши, вызванные исключениями
2013-04-26 в 17:32, admin, рубрики: exceptions, golang, перевод, переводы, Песочница, метки: exceptions, golang, переводКак мы перешли с 30 серверов на 2: Go
2013-03-14 в 14:51, admin, рубрики: cloud computing, golang, ruby, высокая производительность, Облачные вычисления, переводыКак мы перешли с 30 серверов на 2: Go
Когда мы выпустили первую версию IronWorker около 3 лет назад, она была написана на Ruby, а API было написано на Rails. Через некоторое время нагрузка стала быстро расти и мы быстро достигли предела возможностей наших Ruby приложений. Короче говоря, мы перешли на Go. И если вы хотите узнать подробности — продолжайте читать… Читать полностью »
Объектно-дезориентированный язык
2013-01-27 в 9:08, admin, рубрики: golang, дизайн языков программирования, ненормальное программирование, ооп
Каждый раз когда речь заходит о Go приходится слышать один и тот же вопрос:
Является ли Go объектно-ориентированным языком?
Честно говоря, меня это окончательно достало. Моя задача — расписать сию тему в данной статье, напечатать ссылку на визитках и раздавать их каждый раз когда фанаты ООП будут спрашивать у меня этот вопрос.
Читать полностью »
Новогодний батл «Деда Мороза» и Санта-Клауса, а также пара слов о 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...)
начнет выполняться асинхронно с вызвавшим ее кодом.
Обратите внимание, горутины очень легковесны. Практически все расходы — это создание стека, который очень невелик, хотя при необходимости может рости.
Сколько вешать в граммах?
Чтобы было проще ориентироваться, рассмотрим цифры полученные опытным путем.
Читать полностью »
Вступление
Недавно наткнулся на маленький полезный пакет и решил поделиться находкой. Для этого публикую перевод статьи, обсуждающей проблему корректного завершения goroutine извне и предлагающей решение в качестве того самого маленького пакета tomb.
Перевод статьи
Определенно одной из причин, почему людей привлекает язык Go, является первоклассный подход к параллелизму. Такие возможности как общение через каналы, легковесные процессы (goroutines) и их надлежащее планирование — не только являются родными для языка, но и интегрированны в него со вкусом.
Если вы послушаете разговоры в сообществе в течение нескольких дней, то велик шанс, что вы услышите, как кто-то с гордостью отметит принцип:
Не общайтесь с помощью разделяемой памяти, разделяйте память с помощью общения.
На эту тему есть запись в блоге, а также интерактивное упражнение (code walk).
Эта модель очень практична, и при разработке алгоритмов можно получить значительный выигрыш если подойти к задаче с этой стороны, но это уже не новость.
В своей заметке я хочу обратиться к открытому на данный момент в Go вопросу, связанному с этим подходом: завершение фоновой активности.
Читать полностью »
Go4IT
Ранее в сериале: S01E01: Неуловимый Go
Теория заГовора.
Стоит ли растекаться мыслью по древу, погрязая в теологических спорах? Мы же взрослые люди — давайте достанем и измерим! Итак, не откладывая идею в долгий ящик, ставим понятные цели — создать за 48 часов «ХабрUp», способный привлечь внимание миллионной аудитории и, что само собой разумеется, выдержать нагрузку и принести прибыль.
Только таким способом я cмогу убедительно продемонстрировать лёгкость и применимость Go language для создания Web-проектов.
Тут ко мне возникнут два закономерных вопроса:
1. А не хитрожопый ли я Борис Бритва, желающий таким образом пропиарить новый стартап?
2. А не домашняя ли это заготовка, давно дожидавшаяся своей очереди в закромах?
За ответами на эти вопросы и за сутью проекта, извольте под кат, почтенные коллеги!
Читать полностью »
Go for IT. Часть первая
2012-04-04 в 20:23, admin, рубрики: golang, highload, Веб-разработка, высокая производительность, метки: golang, highloadНеуловимый Go.
Помните анекдот про неуловимого Джо? Именно восклицанием «Да кому он нужен!», прозвучавшим в форме вопроса "ЗАЧЕМ?", был встречен на Хабре релиз первой стабильной версии GO 1.
Именно на этот вопрос я хочу ответить циклом статей, оформленных в необычном для Хабра формате — в виде пошаговой совместной разработки действующего веб-проекта — с живым обсуждением и добавлением функционала. А чтобы вдвойне оправдать внесение цикла ещё и в хаб «Высокая производительность», мы поставим перед собой задачу создать не просто «хомяка», а проект, который наглядно продемонстрирует habri et orbi способность выдерживать значительные естественные нагрузки.
Вместо аперитива: реализация простейшего динамического веб-приложения на языке Go работает в 5-20 раз быстрее аналогичной Python-реализации. И всего в два раза уступает скорости отдачи статики Nginx-ом.
В рамках этого проекта, помимо самого языка Go, мы косвенно затронем и другие (относительно новые) технологии веб-разработки — HTML5, CSS3, Redis, MongoDB. Также я постараюсь вытащить из закутков долговременной памяти некоторые из трюков в области безопасности и экономии на спичках, коих накопилось много за полтора десятка лет работы в этой области. Устраивайтесь поудобнее, запасайтесь терпением и кофе — под катом «много букв», а ведь это только вводная часть :)
Читать полностью »
Для тех, кто пишет на языке Go
2012-04-02 в 16:17, admin, рубрики: golang, web-разработка, Веб-разработка, Программирование, производительность, метки: golang, web-разработка, Программирование, производительностьДрузья!
В продолжении поста «Google выпустила финальную версию языка программирования Go 1» интерес получил логическое продолжение и наше робкое желание было услышано администрацией Хабра и с сегодняшнего дня у языка Go есть собственный блог хаб.
Пользуясь случаем, не могу не порекомендовать книгу «Learning Go»Читать полностью »