Маленькая книга о Go – Введение
У меня всегда было чувство на грани любви и ненависти, когда дело доходило до изучения новых языков. С одной стороны, языки имеют настолько фундаментальное значение для того, что мы делаем, что даже мелкое различие может оказать ощутимое значение. Этот вау эффект когда какой-то клик может оказать настолько сильное влияние на то, как вы программируете, что может предопределить ваши ожидания от других языков. С другой стороны, понимание языка является поэтапным процессом. Изучение новых ключевых слов, системы типов, стиля кодирования, а так же новых библиотек, сообществ и парадигм это много работы, которую, казалось бы сложно оправдать. По сравнению со всем остальным, что мы могли бы изучить, новые языки часто кажутся плохой инвестицией нашего времени.
Тем не менее, мы должны двигаться вперед. Мы должны делать постепенные шаги, потому что, опять же, языки являются основой того, что мы делаем. И хотя изменения являются поэтапными, они, как правило, имеют широкую область применения и влияют на продуктивность, читабельность, быстродействие, тестируемость, управление зависимостями, обработку ошибок, документацию, профилирование, сообщества, стандартные библиотеки, и так далее.
У нас может возникнуть важный вопрос: почему Go? Для меня, существуют две весомые причины. Первая в том, что это относительно простой язык с относительно простой стандартной библиотекой. Во многих отношениях инкрементная природа Go является упрощением некоторых сложностей, которые были добавлены к другим языкам за последнюю пару десятилетий. Другая причина в том, что для многих разработчиков он будет дополнять их существующий арсенал.
Go был разработан в качестве системного языка (например, для операционных систем, драйверов устройств) и направлен на C и C++ разработчиков. По данным команды Go, и что верно для меня, разработчики приложений, не системные разработчики, являются основными пользователями Go. Почему? Я не могу авторитетно говорить за системных разработчиков, но те из нас, кто создает веб-сайты, сервисы, приложения для рабочего стола, и т. п. частично приходят к необходимости наличия класса систем, которые находятся где-то между системами низкого уровня и приложениями высокого уровня.
Это может быть обмен сообщениями, кеширование, тяжелые вычисления для анализа данных, утилиты командной строки, логирование или мониторинг. Я не знаю как это назвать, но в течении моей карьеры, когда растет сложность системы и параллелизм часто измеряется в десятках тысяч потоков, появляется быстро растущая потребность в пользовательских инфраструктурных системах. Вы можете построить систему с помощью Ruby или Python или чего-то еще (и многие это делают), но для таких типов систем выгодней использовать более жесткую систему типов и высокую производительность. Кроме того, вы можете использовать Go для разработки веб-сайтов (и многие это делают), но я по прежнему считаю что Node или Ruby с большим отрывом превосходят его для таких систем.
Есть и другие области применения, в которых Go превосходит другие языки. Например, не нужно устанавливать никаких дополнительных зависимостей при запуске скомпилированной программы на Go. Вам не нужно переживать, есть ли у ваших пользователей Ruby или установлена ли JVM, и если да, то какой версии. По этой причине Go становится все более популярным как язык для приложений командной строки и другим разновидностям утилит, которые вам необходимо распространять (например сборщик файлов логов).
Становится ясно, что изучение Go будет эффективным использованием вашего времени. Вам не нужно будет тратить много часов на изучение или хотя бы освоение Go, и в конечном итоге у вас останется что-то полезное от ваших усилий.
Примечание автора
Я колебался писать эту книгу по нескольким причинам. Первая в том, что Go имеет солидную документацию, в частности Effective Go.
Вторая в моем дискомфорте при написании книги о языке. Когда я написал маленькую книгу о MongoDB (The Little MongoDB Book), можно было с уверенностью сказать, что большинство читателей поняли основы реляционных баз данных и моделирования. С маленькой книгой о Redis (The Little Redis Book) вы могли получить представление о хранилищах ключ-значение.
Когда я думаю об абзацах и главах, которые впереди, я знаю, что буду не в состоянии сделать те же предположения. Сколько времени займет разговор об интерфейсах, зная, что для некоторых это будет новая концепция, а другим будет достаточно сказать, что в Go есть интерфейсы? В конечном счете, меня утешает то, что вы можете дать мне знать, если какие-то части слишком поверхностные или другие слишком подробные. Считайте это ценой за книгу.
Приступая к работе
Если вы хотите немного поиграться с Go, вы должны посетить Go Playground которая позволяет запускать код на сайте без необходимости что-то устанавливать. Это также наиболее распространенный способ делиться кодом Go когда вам нужна помощь на форуме Go’s discussion forum или на таких сайтах, как StackOverflow.
Установка Go проста. Вы можете установить его из исходного кода, но я предлагаю вам использовать уже скомпилированные бинарные файлы. Когда вы перейдете на страницу загрузки, вы увидите установочные файлы для различных платформ.
Давайте откажемся от них и научимся устанавливать Go самостоятельно. Как вы увидите, это не трудно.
Кроме простых примеров, Go спроектирован для работы с вашим кодом внутри рабочего пространства. Рабочее пространство это папка которая состоит из подпапок bin
, pkg
и src
. Вы могли бы заставить Go следовать вашему стилю - не нужно.
Как правило, я располагаю свои проекты внутри папки ~/code
. Например, ~/code/blog
содержит мой блог. Для Go мое рабочее пространство это ~/code/go
и мой работающий на Go блог будет в ~/code/go/src/blog
. Так как это долго печатать, я использую символическую ссылку, чтобы сделать его доступным по адресу ~/code/blog
:
ln -s ~/code/go/src/blog ~/code/blog
Короче говоря, создайте папку go
с подпапкой src
куда вы будете складывать свои проекты.
OSX / Linux
Скачайте файл с расширением tar.gz
для вашей платформы. Для OSX, то, что нужно, находится в файле go#.#.#.darwin-amd64-osx10.8.tar.gz
, где #.#.#
это последняя версия Go.
Извлеките содержимое файла в /usr/local
с помощью команды tar -C /usr/local -xzf go#.#.#.darwin-amd64-osx10.8.tar.gz
.
Установите две переменные среды:
GOPATH
указывает на папку с вашим рабочим пространством, для меня, это$HOME/code/go
.- Вам нужно добавить путь к исполняемым файлам Go в переменную
PATH
.
Вы можете установить их с помощью команд:
echo 'export GOPATH=$HOME/code/go' >> $HOME/.profile
echo 'export PATH=$PATH:/usr/local/go/bin' >> $HOME/.profile
Затем нужно активировать эти переменные. Вы можете закрыть и открыть заново ваш интерпретатор команд или выполнить source $HOME/.profile
.
Наберите go version
и вы должны увидеть примерно следующее: go version go1.3.3 darwin/amd64
.
Windows
Скачайте zip-файл с последней версией. Если у вас 64-битная система, вам нужен go#.#.#.windows-amd64.zip
, где #.#.#
последняя версия Go.
Распакуйте его в какую-нибудь папку. c:\Go
будет хорошим выбором.
Установите две переменные среды:
GOPATH
указывает на папку с вашим рабочим пространством. Это может быть что-то вродеc:\users\goku\work\go
.- Добавьте
c:\Go\bin
в переменнуюPATH
.
Переменные среды могут быть установлены с помощью кнопки Environment Variables
на вкладке Advanced
в панели управления System
. Некоторые версии Windows отображают эту панель в пункте Advanced System Settings
внутри панели System
.
Откройте окно командной строки и наберите go version
. Вы увидите что-то подобное: go version go1.3.3 windows/amd64
.
Далее: Глава 1 – Основы