1. Обзор в пяти примерах
В этой главе приводится серия из пяти примеров с подробнымиих описаниями. Несмотря на небольшой размер примеров, каждый из них (кроме «Hello Who?») имеет некоторую практическую ценность, а все вместе они представляют краткий обзор ключевых возможностей языка Go и некоторых его основных пакетов. (То, что в других языках называется модулями или библиотеками, в языке Go называется пакетами, а все пакеты, распространяемые вместе с Go, образуют стандартную библиотеку языка Go.)
Цель этой главы –сформировать представление о языке и вселить в читателя уверенность в необходимости освоения языка Go. Не стоит волноваться, если какие-то интаксические конструкции или идиомы останутся за рамками понимания, – все, что будет показано в этой главе, обязательно будет рассматриваться в последующих главах.
1.1. Начало
Go – это компилирующий язык, а не интерпретирующий, поэтому программы, написанные на этом языке, имеют максимальную производительность. Компиляция выполняется очень быстро – намного быстрее, чем в некоторых других языках, особенно в сравнении с языками C и C++.
Документация по языку Go
По адресу golang.org находится официальный веб-сайт языка Go, где можно найти массу свежей документации по языку Go.
По ссылке Packages (Пакеты) можно перейти к разделу с документацией ко всем пакетам из стандартной библиотеки Go и их исходными текстами, которые могут очень пригодиться, когда в документации обнаруживаются пробелы.
Ссылка References => Command Documentation (Справочники => Документация к командам) ведет в раздел с документацией к программам, распространяемым вместе с Go (компиляторам, инструментам сборки и др.).
По ссылке References => Language Specification (Справочники => Спецификация языка) можно перейтик разделу с неофициальной и весьма полной спецификацией языкаGo.
А по ссылке Documents => Effective Go (Документы => Эффективный Go) находится документ, описывающий многие приемы программирования на Go.
На веб-сайте также имеется «песочница» (с ограниченным набором возможностей), где можно вводить, компилировать и опробовать небольшие программы на языке Go. Данная возможность будет полезна начинающим для проверки непонятных синтаксических конструкций и изучения сложного пакета fmt, содержащего инструменты для работы с форматированным текстом, или пакета regexp – механизма регулярных выражений.
Строка поиска на веб-сайте языка Go может использоваться только для поиска документации – если потребуется отыскать другие ресурсы, посвященные языку Go, посетите страницу go-lang.cat-v.org/go-search.
Документацию по языку Go можно также просматривать локально, например в веб-браузере. Для этого выполните команду godoc, передав ей аргумент, сообщающий, что она должна действовать как веб-сервер. Ниже показано, как выполнить эту команду в консоли Unix (xterm, gnome-terminal, konsole, Terminal.app и др.):
$ godoc -http=:8000
Или в консоли Windows (например, в окне Command Prompt (Командная строка) или MS-DOS Prompt (Сеанс MS-DOS)):
C:\>godoc -http=:8000
Номер порта здесь выбран произвольно. Если он уже занят – просто выберите другой. Здесь предполагается, что выполняемый файл godoc находится в каталоге, указанном в переменной PATH.
Для просмотра локальной документации откройте веб-браузер и введите адрес http://localhost:8000. На экране появится страница, внешним видом напоминающая главную страницу веб-сайта golang.org.
Ссылка Packages (Пакеты) ведет в раздел документации к стандартной библиотеке Go, где также имеется документация к сторонним пакетам, установленным в каталог GOROOT . Если в системе определена переменная окружения GOPATH (например, для локальных программ и пакетов), рядом со ссылкой Packages (Пакеты) появится ссылка к разделу с соответствующей документацией. (Переменные GOROOT и GOPATH обсуждаются ниже в этой главе, а также в главе 9.)
С помощью команды godoc можно еще просматривать документацию для всего пакета в целом или для отдельного его элемента непосредственно в консоли. Например, команда godoc image NewRGBA выведет описание функции image.NewRGBA(), а команда godoc image/png – описание пакета image/png в целом.
Стандартный компилятор языка Go называется gc, а в состав его инструментов входят программы: 5g, 6g и 8g – для компиляции, 5l, 6l и 8l – для компоновки и godoc – для просмотра документации. (В Windows эти программы называются 5g.exe, 6l.exe и т. д.) Такие странные имена были даны в соответствии с соглашениями об именовании компиляторов, принятыми в операционной системе Plan 9, где цифра определяет аппаратную архитектуру (например, «5» – ARM, «6» – AMD-64, включая 64-битные процессоры Intel, и «8» – Intel 386.)
К счастью, нет необходимости напрямую использовать эти инструменты благодаря наличию высокоуровневого инструмента сборки программ на языке Go – go, который автоматически выбирает нужный компилятор и компоновщик. Все примеры из этой книги, доступные для загрузки на странице www.qtrac.eu/gobook.html, были проверены в Linux и Mac OS X с помощью gc, и в Windows с помощью компилятора версии Go 1. Разработчики Go предполагают обеспечить обратную совместимость с версией Go 1 во всех последующих версиях Go 1.x, поэтому описание в книге и примеры должны быть верными для всей серии 1.x.
(Со временем, при обнаружении каких-либо несовместимостей, загружаемые примеры для книги будут обновляться в соответствии с последней версией Go, поэтому они могут отличаться от программного кода в книге.) Чтобы загрузить и установить Go , откройте страницу golang.org/doc/install.html, где приводятся ссылки для загрузки и инструкции по установке. На момент написания этих строк версия Go 1 была доступна в виде двоичных и исходных файлов для FreeBSD 7+, Linux 2.6+, Mac OS X (Snow Leopard и Lion) и Windows 2000+ и во всех случаях для аппаратных архитектур Intel 386 and AMD-64. Для Linux имеется также поддержка архитектуры ARM.
Предварительно собранные пакеты Go имеются для дистрибутива Ubuntu Linux, и к моменту, когда вы будете читать эти строки, они могут появиться для других дистрибутивов Linux. Для начинающих изучать программирование на языке Go проще установить двоичную версию, чем собирать инструменты Go из исходных текстов. Для программ, собираемых компилятором gc , действуют определенные соглашения об именовании.
То есть программы, скомпилированные с помощью gc, могут быть скомпонованы только с внешними библиотеками, следующими тем же соглашениям, в противном случае необходимо использовать подходящий инструмент, устраняющий разногласия. В комплект Go входит инструмент cgo (golang.org/cmd/cgo), обеспечивающий возможность использованиявнешнего программного кода на языке C в программах на языке Go, кроме того, в Linux и BSD-системах имеется возможность использовать код на C и C++ с помощью инструмента SWIG (www.swig.org).
Помимо gc, имеется также компилятор gccgo . Это интерфейс кикомпилятору gcc (GNU Compiler Collection) для языка Go, который может быть задействован с компиляторами gcc, начиная с версии 4.6. Подобно gc, компилятор gccgo может быть доступен в некоторых дистрибутивах Linux в виде готовых пакетов. Инструкции по сборке и установке компилятора gccgo можно найти на странице golang.org/doc/gccgo_install.html.