Skip to content

Latest commit

 

History

History
106 lines (65 loc) · 11.2 KB

File metadata and controls

106 lines (65 loc) · 11.2 KB

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).

(Согласно 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_, проигнорирует.

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). В 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 <утилита>, чтобы ознакомиться с ней.

Ссылки