Язык Go имеет в своем распоряжении полный набор утилит, выполняемых из командной строки. Вы можете исполнить в терминале команду go
, чтобы увидеть их:
Рисунок 1.3 Команда Go показывает подробную информацию
Все эти утилиты могут быть нам полезными. Давайте посмотрим, как пользоваться некоторыми из них.
Эта утилита компилирует тесты. По необходимости она также скомпилирует зависимости.
- Если имя пакета не
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).
(Согласно The Go Programming Language Specification имя пакета должно следовать после слова package
в первой строке исходного файла. Оно не обязательно должно быть таким же, как имя каталога, и имя исполняемого файла по умлочанию будет таким же, как и имя каталога.)
-
go build
не работает с файлами, имя которых начинается на_
или.
. -
Если Вам нужно несколько исходных файлов для каждой операционной системы, Вы можете в конце каждого имени файла добавить соответствующий суффикс ОС. Предположим, имеется несколько файлов для загрузки массивов. Можно назвать их следующим образом:
array_linux.go | array_darwin.go | array_windows.go | array_freebsd.go
go build
выберет тот, который соответствует Вашей ОС. Например, в Linux-системах он скомпилирует только array_linux.go, а все остальные файлы, начинающиеся с array_, проигнорирует.
Эта команда удаляет все файлы, созданные компилятором, включая следующие:
_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. Эти файлы полезны на этапе тестов, но не нужны для контроля версий.
Те из вас, которые работают с C/C++, должны знать, что люди часто дискутируют, какой стиль написания кода лучше: K&R-стиль или ANSI-стиль. Однако же в Go есть только один стиль написания кода. Например, левые скобки могут быть только в конце строк, а не на своих отдельных строках, иначе Вы получите ошибку компиляции! К счастью, Вам не нужно запоминать все эти правила. go fmt
сделает всю работу за Вас. Просто выполните команду go fmt <Имя файла>.go
в терминале. Я не пользуюсь этой командой часто, поскольку среды разработки делают то же самое автоматически при сохранении проекта. О средах разработки я расскажу подробнее в следующем разделе.
go fmt
- это алиас(сокращение) для gofmt -l -w
для пакетов, указанных в пути команды import.
Мы обычно используем gofmt -w
вместо go fmt
. Последний вариант не переписывает исходники после форматирования кода. gofmt -w src
форматирует весь проект.
Эта команда служит для установки удаленных пакетов. На данный момент она поддерживает 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
).
Эта команда компилирует все пакеты, создает соответствующие файлы и перемещает их в $GOPATH/pkg
или $GOPATH/bin
.
Эта команда загружает все файлы, чьи имена включают в себя *_test.go
и создает исполняемые файлы тестов, а затем печатает на экране информацию, подобную следующей:
ok archive/tar 0.011s
FAIL archive/zip 0.022s
ok compress/gzip 0.033s
...
По умолчанию она обрабатывает все файлы тестов. Для более подробной информации используйте go help testflag
.
Многие говорят, что никакая сторонняя документация для программирования на Go не нужна (вообще я одну сделал - CHM). В 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 <утилита>
, чтобы ознакомиться с ней.
- Содержание
- Предыдущий раздел: $GOPATH и рабочий каталог
- Следующий раздел: Инструменты разработки для Go