Приступая к работе
Для начала нужно настроить 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
И еще раз попробовать запустить локальный сервер документации.
Что дальше
На самом деле, еще можно рассказать про настройку тулзовин для тестирования, сборки и т.д. Но на это одной статьи не хватит :)
Шаблон проекта на гитхабе