我想了解如何在超出的示例中正确导入包。
我已经阅读了这个主题(How to use custom packages in golang?),但它并没有解释我想要了解的内容。
例如,我想创建一个包,以便在我的程序中进一步使用它并在github.com上发布。这就是我在视图中组织代码的方式:
src/
github.com/
username/
repository/
lib1.go #package repository
lib2.go #package repository
sublib/
sublib1.go #package sublib
sublib2.go #package sublib
...
myproject/
programname.go #package main
#there is no problem how to import my repository here:
#import "github.com/username/repository"
#or import "github.com/username/repository/sublib"
好的,此时我想了解如何在repository
中导入repository/sublib
代码,反之亦然。我认为问题更多的是针对内部导入(在一个存储库下)。
第一个解决方案显然是 - 通过fullpath导入包:
github.com/username/repository
和中sublib1.go
在github.com/username/repository/sublib
lib1.go
github.com/username/repository
中导入sublib1.go
时,我也遇到了问题(我收到错误消息import cycle not allowed
)。
我希望我能解释得很好。
答案 0 :(得分:2)
您不能在Go中进行循环导入,明确禁止它们。您唯一的选择是重新考虑拆分包的方式,这样就没有循环。
答案 1 :(得分:1)
import "github.com/username/repository/sublib"
是要走的路:就像我在“Is it possible don't specify package name?”中提到的那样,另一个“解决方案”将是
import "./sublib"
这是使用相对路径,这不是一个好习惯,如“Go language package structure”和“Golang how to import local packages without gopath?”中所述。
如果您将来更改路径,问题将与绝对或相对导入路径类似,但第一(绝对)路径仍然是其他人“可以获取”。