Приступая к работе

8 minute read

Для начала нужно настроить workflow с блекджеком и шлюхами. Для качественной работы нам нужно:

  • Менеджер версий Go
  • Менеджер сторонних пакетов
  • Как бонус - локальная документация

Менеджер версий

Тут, вроде как, не очень много вариантов для выбора. gvm - самое отличное, что я нашел.

Ставится просто:

$ bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)

Зависимости:

$ sudo apt-get install curl git mercurial make binutils bison gcc

Устанавливаем новую версию Go и используем ее:

$ gvm install go1.2
$ gvm use go1.2

Если gvm надоел, то удаляется тоже просто:

$ rm -rf ~/.gvm

Структура проекта

Вот тут очень хорошо описано про базовую структуру проекта. Описанный подход не совсем мне нравиться. Хочется такую структуру для каждого проекта, а не для всех сразу. И это вполне достижимо.

project/
    |- bin/
    |- pkg/
    |- src/
    |   |-4gophers.com/
    |        |-/somepackage/
    |            |-file.go
    |            |-somefile.go
    |- main.go
    |- Godeps
$ source activate.sh

Теперь, весь код можно убирать в папку src, спокойно разделить на пакеты и использовать:

import "4gophers.com/somepackage"

Папка 4gophers.com в src нужна, чтобы разруливался конфликт имен при использовании пакетов.

Управляем зависимостями

Менеджеров пакетов для golang тьма тьмущая. Как-то не могут определиться с одним и использовать его. Это тема для отдельной статьи.

В принципе, можно юзать стандартный go get, но тут проблема с переключением между определенными версиями. И неудобно если в проекте много зависимостей.

Мне больше всего нравится gpm - никаких излишеств. Устанавливаем:

$ git clone https://github.com/pote/gpm.git && cd gpm
$ ./configure
$ make install

Использовать gpm лучше всего совместно с gvp. Это позволит устанавливать пакеты определенных версий в отдельную папку .godeps. Устанавливаем:

$ git clone https://github.com/pote/gvp.git && cd gvp
$ ./configure
$ make install

Используем:

$ gvp init
$ source gvp in
$ source gvp out

Теперь можно устанавливать наши зависимости. Для этого в корне нужно создать файл Godeps с примерно таким содержанием:

github.com/nu7hatch/gotrail               v0.0.2
github.com/replicon/fast-archiver         v1.02
launchpad.net/gocheck                     r2013.03.03   # Bazaar repositories are supported
code.google.com/p/go.example/hello/...    ae081cd1d6cc  # And so are Mercurial ones

И запустить:

$ gpm install

Все необходимые пакеты скачаются и установятся в папку .godeps.

Документация

В Go очень удобная офлайн документация, которую можно посмотреть выполнив:

$ godoc -http=:6060

Если все хорошо, в браузере можно будет посмотреть документацию http://localhost:6060. А если все как у меня, то нужно заморочиться

$ go get code.google.com/p/go.tools/godoc
$ go get code.google.com/p/go.tools/cmd/godoc

И еще раз попробовать запустить локальный сервер документации.

Что дальше

На самом деле, еще можно рассказать про настройку тулзовин для тестирования, сборки и т.д. Но на это одной статьи не хватит :)

Шаблон проекта на гитхабе