golang 意外的目录布局

golang unexpected directory layout

所以我从 github 下载了 minio。com/minio/minio

我想从源头运行,

我创建的目录如下:

~/Downloads/minio-RELEASE.2017-06-13T19-01-01Z
|
 src
   |
    all minio directories, including vendor, like the image below

我也用godep解决GOPATH下的其他依赖。

现在我 运行 它来自 Gogland(go IDE)

显示:

GOROOT=/usr/local/Cellar/go/1.8.3/libexec
GOPATH=/Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z:/Users/xl/go
/usr/local/Cellar/go/1.8.3/libexec/bin/go build -i -o /private/var/folders/8v/6dg7d6mx2850sv1gp8ts9thm0000gn/T/go_run_main_gogo /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/main.go
unexpected directory layout:
    import path: github.com/Azure/azure-sdk-for-go/storage
    root: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src
    dir: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/vendor/github.com/Azure/azure-sdk-for-go/storage
    expand root: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src
    expand dir: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/vendor/github.com/Azure/azure-sdk-for-go/storage
    separator: /

现在我很困惑,这是什么问题?文件都在那里,目录就像它正在打印的一样。我如何解决它?谢谢

GitHub code layout

$GOPATH is the root of the project - each of your Github repos will be checked out several folders below $GOPATH.
Your $GOPATH variable will point to the root of your Go workspace, as described in How to Write Go Code.

在你的情况下,在你的 GOPATH 文件夹下,你应该有

src/github.com/minio/minio

只有Anf 然后 "all minio directories, including vendor"

如果您在 goroot 和 gopath 下有重复的存储库,就会发生这种情况。删除 goroot 那个。

在 Golang 1.13 上,从 1.11 升级到 1.13 后,我的所有代码突然发生了这种情况。

golang 1.13 似乎不再喜欢像“./something”这样的导入。

我必须开发任何像 "myapp/something"

这样的导入

还有 go1.13(移动到 mod),我发现如果我将我的项目从我的 $GOPATH 下移出,我可以使用 import "./ mypackage 语句。 $GOPATH 下的同一个项目不会因上述 OP 给出的错误而构建。我还没有准备好放弃我的 $GOPATH 环境变量,但我确实喜欢在可能的情况下将小包保留在他们的项目本地,而不在不需要时提交到 go.mod 文件。

在我意识到由于我的项目位置而无法正确导入本地包后,我遇到了这个问题。 我的项目不在 GOPATH 位置,所以我把我的项目移到了那里。搬家前

我通过 ./package name 导入了包,在我将我的项目移动到 GOPATH 后,我通过 projectname/packagename.

正确地导入了包

所以我所做的是以正确的方式导入包 "projectname/packagename",所以我将导入“./packagename”更正为“”projectname/packagename。 希望它不会太混乱。似乎这个错误可以从不同的情况出现。

如果你的项目文件夹在 $GOPATH 目录下,那么你应该导入你的包而不使用“./package”。

仅当您的项目文件在 $GOPATH

之外时,您才可以导入名称为“./package”的包