107 lines
11 KiB
Markdown
107 lines
11 KiB
Markdown
# 1.3 Утилиты Go
|
||
|
||
## Утилиты Go
|
||
|
||
Язык Go имеет в своем распоряжении полный набор утилит, выполняемых из командной строки. Вы можете исполнить в терминале команду `go`, чтобы увидеть их:
|
||
|
||

|
||
|
||
Рисунок 1.3 Команда Go показывает подробную информацию
|
||
|
||
Все эти утилиты могут быть нам полезными. Давайте посмотрим, как пользоваться некоторыми из них.
|
||
|
||
## go build
|
||
|
||
Эта утилита компилирует тесты. По необходимости она также скомпилирует зависимости.
|
||
|
||
- Если имя пакета не `main`, а, например, `mymath` из раздела 1.2, то после того, как Вы выполните `go build`, ничего не скомпилируется. Если Вы хотите скомпилировать файл `.a` в `$GOPATH/pkg`, Вам вместо этого нужно выполнить `go install`.
|
||
- Если имя пакета - `main`, то в каталоге, откуда Вы запустили утилиту, будет создан исполняемый файл. Если Вы хотите, чтобы файл был создан в `$GOPATH/bin`, используйте `go install` или `go build -o ${указать путь}/a.exe.`
|
||
- Если в каталоге много файлов, но Вы хотите скомпилировать только один, Вам нужно добавить имя файла после `go build`. Например, `go build a.go`. Просто `go build` скомпилирует все файлы в каталоге.
|
||
- Вы также можете указать имя исполняемого файла, который будет создан. Например, в проекте `mathapp` (раздел 1.2), команда `go build -o astaxie.exe` создаст `astaxie.exe` вместо `mathapp.exe`. Именем по умолчанию для исполняемого файла является имя каталога (если пакет не main) или название первого файла-исходника (если пакет - main).
|
||
|
||
(Согласно [Спецификации Языка Программирования Go](https://golang.org/ref/spec) имя пакета должно следовать после слова `package` в первой строке исходного файла. Оно не обязательно должно быть таким же, как имя каталога, и имя исполняемого файла по умолчанию будет таким же, как и имя каталога.)
|
||
|
||
- `go build` не работает с файлами, имя которых начинается на `_` или `.`.
|
||
- Если Вам нужно несколько исходных файлов для каждой операционной системы, Вы можете в конце каждого имени файла добавить соответствующий суффикс ОС. Предположим, имеется несколько файлов для загрузки массивов. Можно назвать их следующим образом:
|
||
|
||
array_linux.go | array_darwin.go | array_windows.go | array_freebsd.go
|
||
|
||
`go build` выберет тот, который соответствует Вашей ОС. Например, в Linux-системах он скомпилирует только array_linux.go, а все остальные файлы, начинающиеся с array_, проигнорирует.
|
||
|
||
## go clean
|
||
|
||
Эта команда удаляет все файлы, созданные компилятором, включая следующие:
|
||
|
||
_obj/ // старый каталог object, созданный Makefiles
|
||
_test/ // старый каталог test, созданный Makefiles
|
||
_testmain.go // старый каталог gotest, созданный Makefiles
|
||
test.out // старый каталог test, созданный Makefiles
|
||
build.out // старый каталог test, созданный Makefiles
|
||
*.[568ao] // объектные файлы, созданные Makefiles
|
||
|
||
DIR(.exe) // создано go build
|
||
DIR.test(.exe) // создано go test -c
|
||
MAINFILE(.exe) // создано go build MAINFILE.go
|
||
|
||
Я обычно пользуюсь этой командой, чтобы почистить свой проект от файлов перед тем, как загрузить его на Github. Эти файлы полезны на этапе тестов, но не нужны для контроля версий.
|
||
|
||
## go fmt и gofmt
|
||
|
||
Те из вас, которые работают с C/C++, должны знать, что люди часто дискутируют, какой стиль написания кода лучше: K&R-стиль или ANSI-стиль. Однако же в Go есть только один стиль написания кода. Например, левые скобки могут быть только в конце строк, а не на своих отдельных строках, иначе Вы получите ошибку компиляции! К счастью, Вам не нужно запоминать все эти правила. `go fmt` сделает всю работу за Вас. Просто выполните команду `go fmt <Имя файла>.go` в терминале. Я не пользуюсь этой командой часто, поскольку среды разработки делают то же самое автоматически при сохранении проекта. О средах разработки я расскажу подробнее в следующем разделе.
|
||
|
||
`go fmt` - это алиас(сокращение) для `gofmt -l -w` для пакетов, указанных в пути команды import.
|
||
|
||
Мы обычно используем `gofmt -w` вместо `go fmt`. Последний вариант не переписывает исходники после форматирования кода. `gofmt -w src` форматирует весь проект.
|
||
|
||
## go get
|
||
|
||
Эта команда служит для установки удаленных пакетов. На данный момент она поддерживает BitBucket, GitHub, Google Code и Launchpad. При запуске этой команды происходят следующие вещи: первая - Go скачивает исходники пакетов, вторая - исполняется `go install`. Перед использованием этой команды убедитесь, что у Вас установлены соответствующие инструменты:
|
||
|
||
BitBucket (Mercurial Git)
|
||
GitHub (git)
|
||
Google Code (Git, Mercurial, Subversion)
|
||
Launchpad (Bazaar)
|
||
|
||
Для того, чтобы использовать эту команду, Вы должны корректно установить эти инструменты. Не забудьте установить переменную `$PATH`. Кстати, эта команда также поддерживает нестандартные доменные имена. Для более детальной информации используйте `go help remote` ( ***Прим. переводчика на русский язык - у меня сработала не эта команда, а `go help importpath`*** ).
|
||
|
||
## go install
|
||
|
||
Эта команда компилирует все пакеты, создает соответствующие файлы и перемещает их в `$GOPATH/pkg` или `$GOPATH/bin`.
|
||
|
||
## go test
|
||
|
||
Эта команда загружает все файлы, чьи имена включают в себя `*_test.go` и создает исполняемые файлы тестов, а затем печатает на экране информацию, подобную следующей:
|
||
|
||
ok archive/tar 0.011s
|
||
FAIL archive/zip 0.022s
|
||
ok compress/gzip 0.033s
|
||
...
|
||
|
||
По умолчанию она обрабатывает все файлы тестов. Для более подробной информации используйте `go help testflag`.
|
||
|
||
## godoc
|
||
|
||
Многие говорят, что никакая сторонняя документация для программирования на Go не нужна (вообще, я одну сделал - [CHM](https://github.com/astaxie/godoc)). В Go существует мощная утилита для того, чтобы управлять документацией "из коробки".
|
||
|
||
Итак, как мы можем ознакомиться с информацией о пакете в документации? Например, если Вы хотите получить подробную информацию о пакете `builtin`, используйте команду `godoc builtin`. Подобным образом Вы можете воспользоваться `godoc net/http` для того, чтобы ознакомиться с документацией по пакету `http`. Если Вам нужно больше деталей об отдельных функциях, выполните `godoc fmt Printf` и `godoc -src fmt Printf`, чтобы увидеть исходный код функции .
|
||
|
||
Выполните `godoc -http=:8080`, затем откройте в браузере `127.0.0.1:8080`. Вы должны увидеть локальную версию сайта golang.org. Она покажет не только информацию о стандартных пакетах, но также о пакетах в Вашем `$GOPATH/pkg`. Это здорово для людей, которые страдают от Великого Китайского Файерволла.
|
||
|
||
## Другие утилиты
|
||
|
||
В Go есть больше утилит, чем те, о которых мы только что говорили:
|
||
|
||
go fix // делает апгрейд кода, написанного в версии, старее, чем go1 до новой версии (после go1)
|
||
go version // выдает информацию об установленной версии Go
|
||
go env // выдает информацию о переменных окружения Go
|
||
go list // перечисляет все установленные пакеты
|
||
go run // компилирует во временные файлы и запускает приложение
|
||
|
||
По этим утилитам есть также более детальная информация. Вы можете воспользоваться `go help <утилита>`, чтобы ознакомиться с ней.
|
||
|
||
## Ссылки
|
||
|
||
- [Содержание](preface.md)
|
||
- Предыдущий раздел: [$GOPATH и рабочий каталог](01.2.md)
|
||
- Следующий раздел: [Инструменты разработки для Go](01.4.md)
|