如何从父目录进行相对导入?
来自meme/cmd/meme:
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
go run main.go
go build main.go
刚才我说去安装的时候,我的评论是错误的。我应该说去建造。
然而,关键是go build单靠它是行不通的。您必须输入go build main.go。这是因为go命令不允许“非本地包中的本地导入”。没错,规范在这里无济于事。它说:“ ImportPath的解释取决于实现。” 当前的实现行为是由CL 5787055设置的,其后在Go- nuts上进行了详细讨论。
go build
“本地”是指用文件系统相对路径指示。显然,以..开头的相对路径是本地的,所以窍门就是让go命令也将main视为本地包。键入时它显然不会这么做go build,但键入时却可以go build main.go。
go