如何在golang中的一个存储库之间导入包之间的包?

时间:2014-11-12 12:33:15

标签: git go repository

我想了解如何在超出的示例中正确导入包。

我已经阅读了这个主题(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.gogithub.com/username/repository/sublib
  • lib1.go
嗯,但如果我将来改变道路怎么办?可能有更好的方法来导入内部包..当我在github.com/username/repository中导入sublib1.go时,我也遇到了问题(我收到错误消息import cycle not allowed)。

我希望我能解释得很好。

2 个答案:

答案 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?”中所述。

如果您将来更改路径,问题将与绝对或相对导入路径类似,但第一(绝对)路径仍然是其他人“可以获取”。