Подтвердить что ты не робот

Golang: Ошибка установки каталога?

У меня есть ошибка:

go install: no install location for directory /Users/xwilly/Dropbox/go/project/src outside GOPATH 

Я использую go версии 1.1 для OS X.

Я могу создавать и запускать, но не могу установить пакеты.

Моя среда:

GOPATH=/Users/xwilly/Dropbox/go/project
PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/go/bin:/Users/xwilly/Dropbox/go/project/bin

Дерево проектов:

/Users/xwilly/Dropbox/go/project
bin
pkg
src

Я могу построить без ошибок:

..:src xwilly$ go build test.go 
..:src xwilly$ go install test.go
go install: no install location for directory /Users/xwilly/Dropbox/go/project/src outside GOPATH

Вот простой пример:

xwilly$ cat test.go 
package main

import (
    "fmt"
)

func main() {
    fmt.Println("Bonjour")
}
xwilly$ go run test.go 
Bonjour
xwilly$ go install test.go 
go install: no install location for directory /Users/xwilly/Dropbox/go/project/src/learning outside GOPATH
4b9b3361

Ответ 1

Команда go

переменная окружения GOPATH

Каждая директория, указанная в GOPATH, должна иметь предписанную структуру:

В каталоге src/ содержится исходный код. Путь ниже "src" определяет путь импорта или исполняемое имя.

В каталоге pkg/ хранятся установленные объекты пакета. Как и в дереве Go, каждая целевая операционная система и пара архитектуры имеют свои собственные подкаталог pkg (pkg/GOOS_GOARCH).

Если DIR - это каталог, указанный в GOPATH, пакет с источником в DIR/src/foo/bar можно импортировать как "foo/bar" и имеет скомпилированную форму установлен на "DIR/pkg/GOOS_GOARCH/foo/bar.a".

В каталоге bin/ хранятся скомпилированные команды. Каждая команда имеет имя для его исходный каталог, но только конечный элемент, а не весь путь. То есть команда с источником в DIR/src/foo/quux устанавливается в DIR/bin/quux, а не DIR/bin/foo/quux. foo/ разделяется так, что вы может добавить DIR/bin в ваш PATH, чтобы получить установленные команды. Если GOBIN задана переменная среды, команды установлены на вместо имени DIR/bin вместо имени

Вот пример макета каталога:

GOPATH=/home/user/gocode

/home/user/gocode/
    src/
        foo/
            bar/               (go code in package bar)
                x.go
            quux/              (go code in package main)
                y.go
    bin/
        quux                   (installed command)
    pkg/
        linux_amd64/
            foo/
                bar.a          (installed package object)

Структура вашего каталога неверна. Вы пытаетесь установить команду (package main). Он должен находиться в исходном каталоге, названном после вашей команды. См. Команду quux выше.

В вашем случае предположим, что ваша команда будет называться billy.

$ mkdir -p /Users/xwilly/Dropbox/go/project/src/billy

который находится внутри вашего GOPATH. Переместите файл test.go в этот каталог. Run

$ go install billy

Команда billy должна, если вы не установили GOBIN, быть установлена ​​в

/Users/xwilly/Dropbox/go/project/bin

внутри вашего GOPATH, который должен находиться в вашем PATH.