This commit is contained in:
Slava Zgordan
2015-07-26 07:37:42 +02:00
parent 8e821f8f5d
commit c6a5a415ca

106
ru/01.3.md Normal file
View File

@@ -0,0 +1,106 @@
#1.3 Команды Go
## Команды Go
Язык Go имеет в своем распоряжении полный набор операций, выполняемых из командной строки. Вы можете исполнить в терминале команду `go`, чтобы увидеть их:
![](images/1.3.go.png?raw=true)
Рисунок 1.3 Команда Go показывает подробную информацию
Все эти команды могут быть нам полезными. Давайте посмотрим, как пользоваться некоторыми из них.
## go build
Эта команда компилирует тесты. По необходимости она также скомпилирует зависимости.
- Если имя пакета - `main`, а, например, `mymath` из раздела 1.2, ничего не будет создано, после того, как Вы выполните `go build`. Если Вы хотите скомпилировать файл `.a` в `$GOPATH/pkg`, Вам вместо этого нужно выполнить `go install`.
- Если имя пакета - не `main`, то в каталоге, откуда Вы запустили команду, будет создан исполняемый файл. Если Вы хотите, чтобы файл был создан в `$GOPATH/bin`, используйте `go install` или `go build -o ${PATH_HERE}/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](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, left by Makefiles
_test/ // старый каталог test, left by Makefiles
_testmain.go // старый каталог gotest, left by Makefiles
test.out // старый каталог test, left by Makefiles
build.out // старый каталог test, left by 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 <File name>.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)