提交 15fcfa98 编写于 作者: S Slava Zgordan

01.3 fix 1

上级 c01ae989
#1.3 Команды Go
#1.3 Утилиты Go
## Команды Go
## Утилиты Go
Язык 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` скомпилирует все файлы в каталоге.
- Если имя пакета не `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](https://golang.org/ref/spec), имя пакета должно следовать после слова `package` в первой строке исходного файла. Оно не обязательно должно быть таким же, как имя каталога, и имя исполняемого файла по умлочанию будет таким же, как и имя каталога.])
(Согласно [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
......@@ -32,11 +32,11 @@
Эта команда удаляет все файлы, созданные компилятором, включая следующие:
_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
_obj/ // старый каталог object, созданный Makefiles
_test/ // старый каталог test, созданный Makefiles
_testmain.go // старый каталог gotest, созданный Makefiles
test.out // старый каталог test, созданный Makefiles
build.out // старый каталог test, созданный Makefiles
*.[568ao] // объектные файлы, созданные Makefiles
DIR(.exe) // создано go build
......@@ -47,9 +47,9 @@
## go fmt и gofmt
Те из вас, которые работают с C/C++, должны знать, что люди часто дискутируют, какой стиль написания кода лучше: K&R-стиль или ANSI-стиль. Однако же в Go есть только один стиль написания кода. Например, левые скобки могут быть только в конце строк, а не на своих отдельных строках, иначе Вы получите ошибку компиляции! К счастью, Вам не нужно запоминать все эти правила. `go fmt` сделает всю работу за Вас. Просто выполните команду `go fmt <File name>.go` в терминале. Я не пользуюсь этой командой часто, поскольку среды разработки делают это автоматически при сохранении проекта. Я расскажу о средах разработки подробнее в следующем разделе.
Те из вас, которые работают с C/C++, должны знать, что люди часто дискутируют, какой стиль написания кода лучше: K&R-стиль или ANSI-стиль. Однако же в Go есть только один стиль написания кода. Например, левые скобки могут быть только в конце строк, а не на своих отдельных строках, иначе Вы получите ошибку компиляции! К счастью, Вам не нужно запоминать все эти правила. `go fmt` сделает всю работу за Вас. Просто выполните команду `go fmt <Имя файла>.go` в терминале. Я не пользуюсь этой командой часто, поскольку среды разработки делают то же самое автоматически при сохранении проекта. Я расскажу о средах разработки подробнее в следующем разделе.
`go fmt` - это алиас(сокращение) для 'gofmt -l -w' для пакетов, указанных в пути команды import.
`go fmt` - это алиас(сокращение) для `gofmt -l -w` для пакетов, указанных в пути команды import.
Мы обычно используем `gofmt -w` вместо `go fmt`. Последний вариант не переписывает исходники после форматирования кода. `gofmt -w src` форматирует весь проект.
......@@ -62,15 +62,15 @@
Google Code (Git, Mercurial, Subversion)
Launchpad (Bazaar)
Для того, чтобы использовать эту команду, Вы должны корректно установить эти инструменты. Не забудьте установить переменную `$PATH`. Кстати, эта команда также поддерживает нестандартные доменные имена. Для более детальной информации используйте `go help remote` ( *** Прим. переводчика на русский язык - у меня сработала не эта команда, а `go help importpath`*** ).
Для того, чтобы использовать эту команду, Вы должны корректно установить эти инструменты. Не забудьте установить переменную `$PATH`. Кстати, эта команда также поддерживает нестандартные доменные имена. Для более детальной информации используйте `go help remote` ( ***Прим. переводчика на русский язык - у меня сработала не эта команда, а `go help importpath`*** ).
## go install
Эта команда компилирует все пакеты, создает файлы и перемещает их в `$GOPATH/pkg` или `$GOPATH/bin`.
Эта команда компилирует все пакеты, создает соответствующие файлы и перемещает их в `$GOPATH/pkg` или `$GOPATH/bin`.
## go test
Эта команда загружает все файлы, чьи имена включают в себя `*_test.go` и создает файлы тестов, а затем печатает на экране информацию, подобную следующей:
Эта команда загружает все файлы, чьи имена включают в себя `*_test.go` и создает исполняемые файлы тестов, а затем печатает на экране информацию, подобную следующей:
ok archive/tar 0.011s
FAIL archive/zip 0.022s
......@@ -81,23 +81,23 @@
## godoc
Многие говорят, что никакая сторонняя документация для программирования на Go не нужна (вообще я сделал одну [CHM](https://github.com/astaxie/godoc) уже). В Go существует мощная утилита для того, чтобы управлять документацией "из коробки".
Многие говорят, что никакая сторонняя документация для программирования на Go не нужна (вообще я одну сделал - [CHM](https://github.com/astaxie/godoc)). В Go существует мощная утилита для того, чтобы управлять документацией "из коробки".
Итак, как мы можем ознакомиться с инормацией о пакете в документации? Например, если Вы хотите получить подробную информацию о пакете `builtin`, используйте команду `godoc builtin`. Подобным образом Вы можете воспользоваться `godoc net/http` для того, тчобы ознакомиться с документацией по пакету `http`. Если Вам нужно больше деталей об отдельных функциях, выполните `godoc fmt Printf` и `godoc -src fmt Printf`, чтобы увидеть исходный код функции .
Итак, как мы можем ознакомиться с информацией о пакете в документации? Например, если Вы хотите получить подробную информацию о пакете `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 есть больше утилит, чем те, о которых мы только что говорили:
go fix // делает апгрейд кода, написанного в версии, старее, чем go1 до новой версии (после go1)
go version // выдает информацию аб утсановленной версии Go
go version // выдает информацию об установленной версии Go
go env // выдает информацию о переменных окружения Go
go list // перечисляет все установленные пакеты
go run // компилирует во временные файлы и запускает приложение
По этим командам есть также более детальная информация. Вы можете воспользоваться `go help <команда>`, чтобы ознакомиться с ней.
По этим утилитам есть также более детальная информация. Вы можете воспользоваться `go help <утилита>`, чтобы ознакомиться с ней.
## Ссылки
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册