8.9 KiB
#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
}
Сейчас нами создан каталог пакета, в пакет записан код. Я рекомендую использовать одни и те же названия для пакетов и каталогов. в которых они находятся, таким образом каталоги будут сожержать все исходные файлы пакета.
Компиляция пакетов
Мы только что создали пакет, но как нам теперь скомпилировать его для того, чтобы потом использовать? Для этого существуют два способа:
- Перейдите в каталог пакета и выполните команду
go install. - Выполните вышеуказанную команду с указанием имени файла, например
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, замените ее сами.)
Ссылки
- Содержание
- Предыдущий раздел: Установка
- Следующий раздел: Команды Go