import - 从父目录相对导入

标签 import go relative-path

如何从父目录进行相对导入?

来自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 下载的包。 binpkg 保留编译的输出。包名称为 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/

相关文章:

python - 在 Python 中使用多处理,导入语句的正确方法是什么?

SQL 2005 从文件中获取数据

ios - 无法导入 UIKit

MySQL 加载数据 Infile Null 和表达式

go - 如何在 Golang 中使用 socket.io 广播图像?

java - 为什么Java和Go的gzip会得到不同的结果?

go - 使用 Jaeger 在分布式应用程序中跟踪 Kafka 总线

sass - WebPack + SASS : How to generate relative image path?

PHP:如何解析相对 URL

html - 如何获取应用程序根目录?