如何从父目录进行相对导入?
来自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
如何从父目录本地导入?
最佳答案
编辑:相对导入路径不是 Go 的方式。缺乏文档显示了相对路径的流行程度,我看不出使用它们的理由。 Go 推荐的代码组织效果很好。每个包都应该有一个唯一的导入路径,并使用相同的导入路径在任何地方导入。
看看像github.com/ha/doozerd/peer这样的包是怎样的
imports its neighbors .这是 Go 项目中的常见做法,我已经见过很多次了。包camlistore.org/pkg/auth
(也在 GitHub 上;由 Go 的主要作者之一编写)通过完整路径导入 camlistore.org/pkg/netutil
。
即使您在同一个项目中同时拥有命令和库,这种方法也有效。在您最初的问题中,您明智地要求最佳实践。我已尽力解释有关此问题的最佳做法。
Go 中的导入路径不能是相对的。 我推荐阅读 How to Write Go Code ,关于组织 Go 项目的基本读物。这是一个简短的概述:
为您的 Go 开发创建一个类似 ~/go
的目录。然后说:
$ export GOPATH=~/go
$ mkdir $GOPATH/{src,bin,pkg}
$GOPATH/src
包含所有 Go 包的源代码,甚至是您使用 go get
下载的包。 bin
和 pkg
保留编译的输出。包名称为 main
的包是命令并生成可执行二进制文件,这些二进制文件会转到 $GOPATH/bin
。其他包是库,它们的编译目标文件放在 $GOPATH/pkg
中。
现在,如果您将代码放入 $GOPATH/src/matt/meme
,您可以通过 import "matt/meme"
将其导入。建议为您的包名称使用前缀,并为标准库保留简短的包名称。这就是我使用 $GOPATH/src/matt/meme
而不是 $GOPATH/src/meme
的原因。
围绕这个想法组织你的代码。
关于import - 从父目录相对导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10687627/