我有个错误:

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

我在OSX上使用的是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

推荐答案

Command go

GOPATH environment variable

GOPATH中列出的每个目录必须具有规定的 struct :

src/目录包含源代码.下面的路径‘src’决定 导入路径或可执行文件名称.

pkg/目录保存已安装的软件包对象.就像围棋树一样, 每个目标操作系统和体系 struct 对都有自己的 pkg(pkg/GOOS_GOARCH)的子目录.

如果DIRGOPATH中列出的目录,则源代码位于 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/是剥离的,这样你就可以 可以在PATH上加DIR/bin以获取已安装的命令.如果 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)

您的目录 struct 错误.您正在try 安装命令(package main).它应该位于以您的命令命名的源目录中.请参阅上面的quux命令.

在您的示例中,假设您的命令将命名为billy.

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

在你的GOPATH美元之内.将您的test.go文件移动到此目录.跑

$ go install billy

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

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

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

Go相关问答推荐

获取作为类型参数传递给方法接收方中的类型参数的切片的基础类型

困扰围棋官方巡回赛的S建议所有方法都使用同一类型的接收器

如何用Golang解码这个嵌套的json?

go grpc:无法导入github.com/golang/protobuf/proto(没有所需的模块提供包github.com/gorang/protobuf-proto)

如何在 Chi Router 的受保护路由下提供静态文件(尤其是图像)?

为什么docall在singleflight中使用go panic?

Yocto 无法交叉编译 GoLang Wails 应用程序

golang yaml 马歇尔网址

如何从 Go 中的 `HijackedResponse` 中删除 Cursor Position ANSI 转义码?

使用 Go 解组 SOAP 消息

如何仅提取时间作为持续时间

仅在工作日运行 cron

Golang - 将 [8] 布尔转换为字节

如何使用 math/big 对 bigInt 进行取模?

使用无服务器工作流 go sdk 时出现间歇性 JSON 解组错误

curl:(56)Recv失败:连接由golang中的对等方与docker重置

在 VSCode 中使用命令行参数调试 Go 测试

如何断言类型是指向golang中接口的指针

关于GO的几个问题

Go 错误处理、类型断言和 net package包