четверг

История запуска за 24 часа главной страницы Google на языке Go

Введение


Эта статья была написана Reinaldo Aguiar, программистом команды поисковой системы Google. Он делится своим опытом разработки своей первой программы Go и запуском её для миллионной аудитории. Всё это за один день!

Недавно мне предоставилась возможность для работы в небольшом, но очень заметном “20% проекте”: Thanksgiving 2011 Google Doodle. Этот рисунок индейки может случайным образом комбинировать разные стили головы, крыльев, перьев и ног. Пользователь может их настраивать, щелкая в разные места индейки. Такая интерактивность в браузере реализуется комбинацией JavaScript, CSS и конечно же HTML, создающих индюшку на лету.


Как только пользователь создаст свою собственную индейку, он может отправить её в Google+, чтобы поделиться с семьей и друзьями, . При клике на кнопку “Share” (не показана здесь), создается пользовательский поток сообщений в Google+, содержащий снимок индейки. Снимок является единственным изображением индейки, которую создал пользователь.

Имея 13 альтернатив для каждой из 8 частей индейки (голова, пара ног, перья и т.д.) можно создать более чем 800 миллионов разных снимков изображения. Создать их все заблаговременно явно не возможно. Вместо этого мы должны генерировать снимки налету. Комбинация этой проблемы с необходимостью масштабирования и высокой доступностью, делает выбор платформы очевидным: Google App Engine!

вторник

Обработка ошибок в Go


Введение


Если вы писали какой-нибудь код на языке Go, то вероятно встречали встроенный тип error. В коде Go, error используется, чтобы указать на аварийный режим работы. Например, функция os.Open возвращает ненулевое значение error, когда не может открыть файл.
func Open(name string) (file *File, err error)
Следующий код для открытия файла, использует os.Open. Если произойдет ошибка, то будет вызван log.Fatal, чтобы напечатать сообщение об ошибке и остановиться.
f, err := os.Open("filename.ext")
if err != nil {
    log.Fatal(err)
}
// Что-нибудь делаете с *File f
Зная о типе error только это, вы сможете многое сделать в Go, но в этой статья мы более внимательно рассмотрим error и обсудим, некоторые хорошие вещи, которые даются нам для обработки ошибок язык Go.

четверг

Тестовое покрытие программного кода в Go. Часть вторая.


Тестовое покрытие программного кода в Go. Часть первая.

Просмотр результатов


В нашем примере тестовое покрытие было плохим. Чтобы выяснить почему, мы попросим go test записать для нас в файл “профиль покрытия”, который содержит собранные статистические данные, которые мы можем изучить более детально. Это делается легко, используйте флаг -coverprofile и файл для выхода:
% go test -coverprofile=coverage.out 
PASS
coverage: 42.9% of statements
ok      size    0.030s
%
(Флаг -coverprofile автоматически устанавливает -cover, чтобы включить анализ покрытия.) Тестовые прогоны будет такие же как раньше, но результат сохранится в файл. Чтобы изучить результат, мы запустим инструмент тестового покрытия без go test. При запуске мы можем попросить cover сделать разбитие на функции, но в данном случае это не будет показано, так как используется только одна функция:
% go tool cover -func=coverage.out
size.go:    Size          42.9%
total:      (statements)  42.9%
%
Намного более интересный способ просмотра данных заключается в использовании HTML презентации исходного кода, украшенного информацией о покрытии. Она вызывается флагом -html:

Тестовое покрытие программного кода в Go. Часть Первая.


Тестовое покрытие программного кода в Go. Часть вторая.

Введение


С самого начала проект Go, разрабатывался с учетом инструментов (tools). В эти инструменты включается инструмент для представление документации godoc, инструмент для форматирования кода gofmt и gofix для автоматического переписывания кода при изменении API. Возможно самым важным из всех является инструмент go, который автоматически инсталлирует, собирает и тестирует Go программы, используя для этого ничто иное как исходный код.

В релиз Go 1.2 включен новый инструмент для тестового покрытия, который использует необычный подход к тому каким образом генерируется статистика покрытия, подход, который основывается на техники составленной godoc и друзьями.

Поддержка инструментов


Сначала некоторый фон: Что для языка означает поддержка хорошего инструментария? Это означает, что язык делает простым написание хороших инструментов и что его экосистема поддерживает все разнообразие инструментов.

У Go есть много свойств, которые делают его подходящим для создания инструментария. Для начинающих у Go есть правильный синтаксис, который делает простым анализ исходного кода. Грамматика языка стремится к тому, чтобы не было особых случаев, требующих сложного разбора.

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

И наконец, стандартная библиотека поставляется с пригодными для применения пакетами для лексического и синтаксического анализа исходного кода Go. Они также включают более необычные пакеты для структурирования текста программы Go в синтаксическое дерево.

понедельник

Как писать код на языке программирования Go

Введение


Этот документ демонстрирует разработку простого пакета Go и представляет команды компилятора go. Это стандартный способ выбора, создания и установки пакетов и программ Go.

Go требует, чтобы вы организовывали свой код особенным образом. Пожалуйста, прочитайте данный документ очень внимательно. Он объясняет самый простой способ сборки и выполнения команд Go.

Подобное объяснение есть на видео.

Организация кода.


Рабочая область (Workspaces).


Go разрабатывался для работы с открытым исходным кодом, сохраняемым в общедоступных репозитариях. Хотя вы не обязаны публиковать свой исходный код, тем не менее среда для работы устанавливается тем же самым образом, не зависимо от того, публикуете вы свой код или нет.

Код Go должен сохраняться внутри рабочей области (workspaces). Рабочая область - это иерархический каталок с тремя каталогами в его корне:

- src содержит исходные файлы, систематизированные по пакетам (один пакет - один каталог).

- pkg содержит объекты пакетов.

- bin содержит исполняемые файлы.

Go собирает исходные пакеты и инсталлирует законченные исполняемые файлы в каталоги pkg и bin.

Подкаталог src обычно содержит множество репозитариев управления версиями (такие как Git и Mercurian), которые отслеживают разработку одного или более исходных пакетов.

Чтобы дать вам общее представление о том как на практике выглядит рабочая область, приводим пример: