diff --git a/ru/01.2.md b/ru/01.2.md new file mode 100644 index 00000000..80697201 --- /dev/null +++ b/ru/01.2.md @@ -0,0 +1,153 @@ +#1.2 $GOPATH и рабочая директория + +## $GOPATH + +Все команды Go зависят от переменной окружения $GOPATH. Имейте в виду, что это не переменная $GOROOT, в которой хранится путь установки Go. Эта переменная указывает на рабочую директорию Go на Вашем компьютере (я использую этот путь у себя на компьютере; Вы можете заменить его по своему усмотрению, если структура каталогов на вашем компьютере другая). + +В Unix-подобных ситемах переменную можно задать следующим образом: + + export GOPATH=/home/apple/mygo + +В Windows Вам нужно создать новую переменную окружения GOPATH, а затем задать ей значение `c:\mygo`( ***Оно заваисит от того, где расположена Ваша рабочая директория*** ) + +It's OK to have more than one path (workspace) in $GOPATH, but remember that you have to use `:`(`;` in Windows) to break them up. At this point, `go get` will save the content to your first path in $GOPATH. +$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` и поместите туда следующее: + + // Исходный код $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 + +Код: + + //$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 + +Now you are able to see the directory structure clearly; `bin` contains executable files, `pkg` contains compiled files and `src` contains package source files. +Можно ясно видеть структуру каталогов; `bin` содержит исполняемые файлы, `pkg` - скомпилированные файлы и `src` - исходные коды пакетов. + +(В Windows переменная окружения называется `%GOPATH%`, однако эта книга следует в основном стилю Unix, если Вы пользуетесь Windows, замените ее сами.) + +## Ссылки + +- [Содержание](preface.md) +- Предыдущий раздел: [Установка](01.1.md) +- Следующий раздел: [Команды Go](01.3.md)