我有错误:
go install: no install location for directory /Users/xwilly/Dropbox/go/project/src outside GOPATH
我在OS X上使用的是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
答案 0 :(得分:32)
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
文件移动到此目录。运行
$ go install billy
除非您已设置billy
,否则命令GOBIN
应安装在
/Users/xwilly/Dropbox/go/project/bin
<{1}}内的目录,该目录应位于GOPATH
。