从父目录的相对输入(Relative import from parent directory)

2019-06-24 15:45发布

怎样才能做到从父目录的相对进口?

meme/cmd/meme

import "../../../meme"

这给出了一个明确的错误:

matt@stanley:~/gopath/src/bitbucket.org/anacrolix/meme/cmd/meme$ go get bitbucket.org/anacrolix/meme/cmd/meme

can't load package: /home/matt/gopath/src/bitbucket.org/anacrolix/meme/cmd/meme/main.go:8:2: local import "../../../meme" in non-local package

matt@stanley:~/gopath/src/bitbucket.org/anacrolix/meme/cmd/meme$ echo $GOPATH

/home/matt/gopath

如何在本地从父目录导入?

Answer 1:

感谢您将您的问题。 首先,一个答案,然后一些解释。 我建你的代码通过,

  1. 去得到,就像你有它。 (我忽略了错误信息。)
  2. 在进口线路设置main.go回“../../../meme”,因为你想做的事。
  3. (注释出的包含未用的可变码一点点。)
  4. 然后在梅梅/ CMD /米姆目录,要么go run main.gogo build main.go工作。

我错在我的评论年初的时候我说去安装工程; 我应该说走的构建。

关键不过是, go build本身无效; 你必须键入go build main.go 。 这是因为go命令不允许“非本地包本地进口。” 你是正确的,规范是没有多大帮助这里。 它黄鼠狼出来说,“在ImportPath的解释是依赖于实现的。” 当前实现的行为设定CL 5787055 ,随后在长度辩论上的Go-坚果。

与文件系统相对路径指示“本地”的意思。 显然开始..相对路径是本地的,所以诀窍是刚开go命令来治疗主要为本地软件包。 这显然不,当你键入做到这一点go build ,当你键入,但不会go build main.go



Answer 2:

编辑:相对进口路径不是围棋的路要走。 缺少文件显示了一些关于相对路径的普及,我没有看到一个理由使用它们。 Go的推荐代码的组织工作得很好。 每个包应该有一个唯一的进口路径和随处使用相同的导入路径导入。

看怎么样包github.com/ha/doozerd/peer 进口邻国 。 这是围棋项目中一个常见的做法,我已经看到了很多次。 包装camlistore.org/pkg/auth (也GitHub的 ;围棋的主要作者之一书面)进口camlistore.org/pkg/netutil的完整路径。

即使你有在同一项目中这种做法是双向命令和库。 在原来的问题,你问明智的最佳做法。 我做了我最好的解释在这个问题上的最佳做法。


导入路径不能是相对的围棋。 我建议你阅读如何编写Go代码 ,对组织围棋项目的必备读物。 这里有一个简短的概述:

作出这样一个目录~/go为你的围棋发展。 然后说:

$ export GOPATH=~/go
$ mkdir $GOPATH/{src,bin,pkg}

$GOPATH/src适用于所有进入包的源代码,就算对方不是你的下载与go getbinpkg保持编译的输出。 与包名包main是命令和产量,以可执行二进制码哪去了$GOPATH/bin 。 其它的包库及其编译的目标文件放在$GOPATH/pkg

现在,如果你把你的代码在$GOPATH/src/matt/meme ,你可以通过导入import "matt/meme" 。 我们推荐使用前缀为您的包名,离开了标准库短包名。 这就是为什么我用$GOPATH/src/matt/meme ,而不是$GOPATH/src/meme

组织围绕这个观点你的代码。



Answer 3:

Relarive进口时使用手动编译器,链接,...直接支持。 “通过”(构建)工具不支持相同(不知媲美例如,Java)。



文章来源: Relative import from parent directory