Files
2019-06-17 06:52:04 +09:00

152 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 1.2 $GOPATH и рабочий каталог
## $GOPATH
Все команды Go зависят от переменной окружения $GOPATH. Имейте в виду, что это не переменная $GOROOT, в которой хранится путь установки Go. Эта переменная указывает на рабочий каталог Go на Вашем компьютере (я использую этот путь у себя на компьютере; Вы можете заменить его по своему усмотрению, если структура каталогов на вашем компьютере другая).
В Unix-подобных системах переменную можно задать следующим образом:
export GOPATH=/home/apple/mygo
В Windows Вам нужно создать новую переменную окружения GOPATH, а затем задать ей значение `c:\mygo`( ***Оно зависит от того, где расположен Ваш рабочий каталог*** )
$GOPATH при Вашем желании может содержать больше одного пути к рабочим каталогам, но помните, что следует использовать знак `:`(или `;` в Windows) для того, чтобы разделять их. В этом случае `go get` будет сохранять содержимое в первый путь из тех, что указаны в $GOPATH.
В $GOPATH должно находиться три следующих папки:
- `src` для текстов исходных кодов с расширениями .go, .c, .g, .s.
- `pkg` для скомпилированных файлов с расширением .a.
- `bin` для исполняемых файлов.
В этой книге я буду использовать `mygo` в качестве единственного пути в $GOPATH.
## Каталог пакета
Создайте каталоги и исходные файлы пакетов, такие как `$GOPATH/src/mymath/sqrt.go` (где `mymath` - имя пакета) ( ***Автор использует `mymath` в качестве имени пакета и в качестве имени каталога, где располагаются исходные файлы этого пакета***)
Каждый раз при создании пакета Вы должны создать новый каталог в каталоге 'src'. Каталог обычно называется так же, как и пакет, который предполагается использовать. Можно использовать многоуровневую структуру каталогов, если нужно. Например, если создать каталог `$GOPATH/src/github.com/astaxie/beedb`, то путь к пакету будет `github.com/astaxie/beedb`. Имя пакета - это имя последнего каталога пути, в данном случае `beedb`.
Выполните следующие команды: ( ***Сейчас автор возвращается к примеру*** )
cd $GOPATH/src
mkdir mymath
Создайте новый файл `sqrt.go` и поместите туда следующее:
```Go
// Исходный код $GOPATH/src/mymath/sqrt.go
package mymath
func Sqrt(x float64) float64 {
z := 0.0
for i := 0; i < 1000; i++ {
z -= (z*z - x) / (2 * x)
}
return z
}
```
Сейчас нами создан каталог пакета, в пакете содержится код. Я рекомендую использовать одни и те же названия для пакетов и каталогов, в которых они находятся; таким образом, каталог будет содержать все исходные файлы пакета.
## Компиляция пакетов
Мы только что создали пакет, но как нам теперь скомпилировать его для того, чтобы потом использовать? Для этого существуют два способа:
1. Перейдите в каталог пакета и выполните команду `go install`.
2. Выполните вышеуказанную команду с указанием имени файла, например `go install mymath`.
После компиляции можно открыть каталог:
cd $GOPATH/pkg/${GOOS}_${GOARCH}
// Вы увидите созданный файл
mymath.a
Файл с расширением `.a` - это исполняемый файл нашего пакета. Как его можно использовать?
Очевидно, что для этого нам нужно создать какое-нибудь приложение.
Создайте новое приложение под названием `mathapp`.
cd $GOPATH/src
mkdir mathapp
cd mathapp
vim main.go
Код:
```Go
//$GOPATH/src/mathapp/main.go source code.
package main
import (
"mymath"
"fmt"
)
func main() {
fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2))
}
```
Для того, чтобы скомпилировать это приложение, перейдите в каталог с приложением `$GOPATH/src/mathapp`, затем выполните команду `go install`. Вы должны увидеть, как исполняемый файл `mathapp` появился в каталоге `$GOPATH/bin/`. Для запуска приложения выполните команду `./mathapp`. Вы должны увидеть следующее в терминале:
Hello world. Sqrt(2) = 1.414213562373095
## Установка удаленных пакетов
В Go есть инструмент для установки удаленных пакетов - команда `go get`. Он поддерживает работу с большинством сообществ Open Source, включая GitHub, Google Code, BitBucket и Launchpad.
go get github.com/astaxie/beedb
Чтобы обновить Ваши удаленные пакеты, выполните `go get -u …`, при этом установятся все дополнительные зависимости .
Для разных Open Source платформ потребуются различные системы контроля версий, например `git` для GitHub и `hg` для Google Code. Поэтому Вам нужно установить соответствующие системы контроля версий перед использованием `go get`.
После выполнения команд выше структура каталогов будет выглядеть следующим образом:
$GOPATH
src
|-github.com
|-astaxie
|-beedb
pkg
|--${GOOS}_${GOARCH}
|-github.com
|-astaxie
|-beedb.a
Фактически `go get` делает точную копию кода в $GOPATH/src локальной файловой системы, а затем выполняет `go install`.
Удаленные пакеты можно использовать так же, как и локальные:
import "github.com/astaxie/beedb"
## Полная структура каталогов
Если Вы выполнили все предыдущие шаги, структура каталогов должна выглядеть следующим образом:
bin/
mathapp
pkg/
${GOOS}_${GOARCH}, например darwin_amd64, linux_amd64
mymath.a
github.com/
astaxie/
beedb.a
src/
mathapp
main.go
mymath/
sqrt.go
github.com/
astaxie/
beedb/
beedb.go
util.go
Можно ясно видеть структуру каталогов: `bin` содержит исполняемые файлы, `pkg` - скомпилированные файлы и `src` - исходные коды пакетов.
(В Windows переменная окружения называется `%GOPATH%`, однако эта книга следует в основном стилю Unix. Если Вы пользуетесь Windows, замените везде ее название сами.)
## Ссылки
- [Содержание](preface.md)
- Предыдущий раздел: [Установка](01.1.md)
- Следующий раздел: [Утилиты Go](01.3.md)