Files
build-web-application-with-…/ru/01.2.md
Slava Zgordan e65122e2b9 01.2 is ready
2015-07-22 09:42:51 +02:00

8.9 KiB
Raw Blame History

#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, замените ее сами.)

Ссылки