Все команды 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
и поместите туда следующее:
// Исходный код $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
Можно ясно видеть структуру каталогов: bin
содержит исполняемые файлы, pkg
- скомпилированные файлы и src
- исходные коды пакетов.
(В Windows переменная окружения называется %GOPATH%
, однако эта книга следует в основном стилю Unix. Если Вы пользуетесь Windows, замените везде ее название сами.)
- Содержание
- Предыдущий раздел: Установка
- Следующий раздел: Утилиты Go