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

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

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

```shell
$ cargo new newproject
```

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

Прекрасно понимаю, что каждый разработчик создает свою собственную структуру директорий, использует привычную билд-систему. И угодить на всех просто не возможно. Но для себя я решил создать сперва репозиторий, в котором будут представлены файлы, что я обычно создаю при работе с Golang проектами. В итоге создал [go-scratch](https://github.com/Juev/go-scratch "go-scratch"), который достаточно клонировать в рабочую директорию, подправить ряд файлов, переинициализировать Git-репозиторий и можно начинать работать. Все хорошо, уже не нужно переписывать или копировать файлы, но нужно их править и к тому же появляются новые операции типа удаления репозитория и его инициализация.

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

```shell
$ 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-битную операционную систему. Прописаны так же правила по анализу кода, и в будущем планируется добавить запуск тестов.

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

```shell
$ go-create petproject
```

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

Готовые бинарники можно скачать на странице [релиза](https://github.com/Juev/go-create/releases/latest "Latest release").

