21

我有错误:

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

我在 OS X 上使用 go 版本 1.1。

我可以构建和运行但不能安装包。

我的环境:

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
4

1 回答 1

32

命令去

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/目录包含已编译的命令。每个命令都以其源目录命名,但只是最后一个元素,而不是整个路径。也就是 source in 的命令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文件移动到此目录。跑

$ go install billy

billy除非您已设置,否则该命令应GOBIN安装在

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

在你的目录中GOPATH,它应该在你的PATH.

于 2013-07-08T11:37:30.260 回答