Skip to content

Latest commit

 

History

History
151 lines (105 loc) · 8.59 KB

File metadata and controls

151 lines (105 loc) · 8.59 KB

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 и поместите туда следующее:

// Исходный код $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

Можно ясно видеть структуру каталогов: bin содержит исполняемые файлы, pkg - скомпилированные файлы и src - исходные коды пакетов.

(В Windows переменная окружения называется %GOPATH%, однако эта книга следует в основном стилю Unix. Если Вы пользуетесь Windows, замените везде ее название сами.)

Ссылки