Создание проекта для Go

14 January 2018 #golang

Несколько раз программировал на Golang, несколько раз отказывался от него. Да, есть проблемные моменты, но нельзя не признать тот факт, что язык движется и развивается довольно быстро. И самое главное, что каждый день для Golang появляются новые библиотеки под самые разные нужды.

В новых языках программирования создание проекта автоматизируют. Чтобы не приходилось каждый раз копировать конфигурационные файлы, править их. Тратить время на то, что можно сделать автоматически. К примеру в том же Rust:

$ cargo new newproject

И будет создана новая директория newproject, в которой будут представлены и файлы конфигурации и простой файл исходного кода. Замечательно, но почему этого нет в Go?

Прекрасно понимаю, что каждый разработчик создает свою собственную структуру директорий, использует привычную билд-систему. И угодить на всех просто не возможно. Но для себя я решил создать сперва репозиторий, в котором будут представлены файлы, что я обычно создаю при работе с Golang проектами. В итоге создал go-scratch, который достаточно клонировать в рабочую директорию, подправить ряд файлов, переинициализировать Git-репозиторий и можно начинать работать. Все хорошо, уже не нужно переписывать или копировать файлы, но нужно их править и к тому же появляются новые операции типа удаления репозитория и его инициализация.

В итоге создал новый проект go-create, который именно автоматизирует сам процесс создания нового проекта. При этом проект автоматически создается в директории $GOPATH, с использованием вашего Github-имени пользователя. Имя пользователя берется или из git-конфигурации системы, или из параметров командной строки. Так же можно его задать в конфигурационном файле ~/.gocreate. Имя проекта, его версия задаются из параметров командной строки:

$ go-create --help
usage: go-create [<flags>] <name>

Flags:
-h, --help               Show context-sensitive help (also try --help-long and --help-man).
-n, --number="0.0.1"     Project version.
-g, --github=GITHUB      Github username.
-u, --username=USERNAME  Username.
-l, --local              Use current directory for creating.
    --version            Show application version.

Args:
<name>  Project name.

Создается директория проекта по образцу go-scratch, который упоминался чуть выше. Создаются два файла исходного кода, один из которых упрощает работу с версиями проекта. Создается Makefile для упрощения сборки проекта. Пустой README.md файл, файл .gitigonre и директория для бинарников bin.

Makefile сконфигурирован для сборки релиз-версии под четыре различные платформы: Linux, FreeBSD, OSX и Windows. Сборка осуществляется под 64-битную операционную систему. Прописаны так же правила по анализу кода, и в будущем планируется добавить запуск тестов.

Таким образом теперь для того, чтобы начать мне не нужно что-то копировать или править. Достаточно использовать одну команду:

$ go-create petproject

И уже можно начинать работать! Если вы пишете на Golang, надеюсь go-create окажется вам полезным инструментом.

Готовые бинарники можно скачать на странице релиза.