转到本地包和模块

时间:2018-06-25 06:04:20

标签: go import package microservices

我刚刚开始学习GO开发,阅读了很多文章和文档,但是还没有找到具体的答案。

有一些问题

  1. 如何使用本地软件包?使用./../不起作用,我可以将所有源代码放在vendror/src目录下,但这会使我的项目结构看起来像我想要的
  2. 我应该始终将软件包上传到远程存储库中的某个地方吗?是否可以将它们保留在本地。如果我开发微服务,微服务本身就是一个整体应用程序。而且我不希望我的微服务只有一个文件。我想在几个文件之间分割逻辑。
  3. 将所有文件保存在一个文件中可以吗?

我知道这个问题已经被问过几次了,但是我还没有找到完整的答案。

我将不胜感激。谢谢

2 个答案:

答案 0 :(得分:2)

首先:阅读“如何编写Go代码”并坚持并仅遵循它。

  1. go工具没有“本地软件包”。忘记本地,非本地,远程(无论如何)的区别。对于go工具,只有软件包,并且这些软件包都有导入路径。此导入路径确定go工具将在文件系统中查找代码的位置。如果导入路径为import "int.microsoft/secret/new/foo",则软件包foo的代码必须位于计算机上的$ GOPATH / src / int.microsoft / secret / new / foo”下。

    对于go build和(进行安装,进行测试,...),在导入路径中根本没有 no 的含义:“ int.microsoft/secret/new/foo”除了“ example1 / foo”或“ github.com/someone/tool7/bar”外,没有其他字符串。这些只是字符串,并且在这些路径中搜索软件包。这些软件包都不是“本地”软件包,它们都只是软件包。

    因此,如果将代码包“ whatever”的代码放在$ GOPATH / src / some / strange / path / every下,则必须像import "some/strange/path/whatever"那样导入它。

  2. 如果要与其他人共享代码,请保留远程备份,或者要使用github之类的代码托管站点来简化三个工作站的同步,则可以将代码上传到例如github。这与您导入软件包的方式无关。

    go工具中的 only 子命令,其中导入路径除了作为go get的路径之外,还有其他含义,它Login知道一些代码托管站点,例如github并解释了导入路径“ github.com/someone/prjct”,并可以为您克隆此git repo,方便地将其放置在$ GOPATH下的正确文件夹中。

    因此:否。绝对没有必要上传每一段代码。 (例如,我的机器上$ GOPATH / src / tmp下有很多东西。)

    将代码拆分为a)不同的程序包和b不同的文件与此无关。只要您觉得方便又合乎逻辑就可以。

  3. 好吧,不;简单,因为您不能将多个文件保存在一个文件中。您是说“一个文件夹中有几个文件”吗?是的,那很好。如果可以进行拆分,请拆分为文件和软件包。看看标准库或任何其他开源项目。

答案 1 :(得分:0)

  1. 您的导入路径必须使用$GOPATH/libPath语法有效

  2. 为此,您可以根据需要共享服务源代码,并且可以使用多个主程序包来分隔bin

  3. 如果按第二个文件表示目录,则没有最佳实践,只要它不涉及代码复杂性,您也可以这样做