怎样才能做到从父目录的相对进口?
从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
如何在本地从父目录导入?
感谢您将您的问题。 首先,一个答案,然后一些解释。 我建你的代码通过,
- 去得到,就像你有它。 (我忽略了错误信息。)
- 在进口线路设置
main.go
回“../../../meme”,因为你想做的事。 - (注释出的包含未用的可变码一点点。)
- 然后在梅梅/ CMD /米姆目录,要么
go run main.go
或go build main.go
工作。
我错在我的评论年初的时候我说去安装工程; 我应该说走的构建。
关键不过是, go build
本身无效; 你必须键入go build main.go
。 这是因为go命令不允许“非本地包本地进口。” 你是正确的,规范是没有多大帮助这里。 它黄鼠狼出来说,“在ImportPath的解释是依赖于实现的。” 当前实现的行为设定CL 5787055 ,随后在长度辩论上的Go-坚果。
与文件系统相对路径指示“本地”的意思。 显然开始..相对路径是本地的,所以诀窍是刚开go
命令来治疗主要为本地软件包。 这显然不,当你键入做到这一点go build
,当你键入,但不会go build main.go
。
编辑:相对进口路径不是围棋的路要走。 缺少文件显示了一些关于相对路径的普及,我没有看到一个理由使用它们。 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 get
。 bin
和pkg
保持编译的输出。 与包名包main
是命令和产量,以可执行二进制码哪去了$GOPATH/bin
。 其它的包库及其编译的目标文件放在$GOPATH/pkg
。
现在,如果你把你的代码在$GOPATH/src/matt/meme
,你可以通过导入import "matt/meme"
。 我们推荐使用前缀为您的包名,离开了标准库短包名。 这就是为什么我用$GOPATH/src/matt/meme
,而不是$GOPATH/src/meme
。
组织围绕这个观点你的代码。
Relarive进口时使用手动编译器,链接,...直接支持。 “通过”(构建)工具不支持相同(不知媲美例如,Java)。