繁体   English   中英

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

[英]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/repositorysublib1.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM