[英]How to import packages between themselves under one repository in golang?
我想了解如何在示例之外正确导入包。
我已经阅读了这个主题( 如何在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/sublib
导入repository
的代码,反之亦然。 我认为问题更多的是针对内部导入(在一个存储库下)。
第一个解决方案显然是 - 通过fullpath导入包:
github.com/username/repository
在sublib1.go
和 github.com/username/repository/sublib
中的lib1.go
嗯,但如果我将来改变道路怎么办? 可能有更好的方法来导入内部包。当我在sublib1.go
导入github.com/username/repository
时我也遇到了问题(我import cycle not allowed
错误消息)。
我希望我能解释得很好。
您不能在Go中进行循环导入,它们是明确禁止的。 您唯一的选择是重新考虑拆分包的方式,这样就没有循环。
import "github.com/username/repository/sublib"
是要走的路:正如我在“ 是否有可能不指定包名? ”中提到的那样,另一个“解决方案”将是
import "./sublib"
那是使用相对路径,这不是一个好的做法,如“ Go语言包结构 ”和“ Golang如何导入没有gopath的本地包? ”中所述。
如果您将来更改路径,问题将与绝对或相对导入路径类似,但第一(绝对)路径仍然是其他人“可以获取”的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.