如何将一个go模块嵌套在多个Go模块中作为本地依赖项

时间:2019-10-20 14:09:28

标签: go go-modules

$ go version
1.13.3

我的文件夹结构如下:

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
                 +--- go.mod
                 +--- go.sum
           +--- my-utils
                 +--- go.mod
                 +--- go.sum
                 +--- uuid
                       +--- uuid.go

my-auth-server使用my-api-server/my-utils/uuid作为依赖项

我尝试将my-utils移到my-auth-server内,但是作为图书馆,my-utils将在多个地方使用。

现在,my-utils也有一个go.mod,但其中包含一个module声明。 如果我将其放在my-auth-server中,则模块路径将变为my-api-server/my-auth-server/my-utils

如果我有2台服务器,

  • my-auth-server
  • my-session-server

我不能同时将my-utils放在这两个内部,因为每个module只能有一个go.mod声明。

那么,如何在两个不同的项目中将其用作子模块?

在解决此问题方面的任何帮助也将不胜感激。

1 个答案:

答案 0 :(得分:0)

实现此目的的一种干净方法是在所有项目之外使用utils一个独立的模块,然后将其导入到任何需要的地方。既然显而易见,您希望它本身就是一个模块。

喜欢

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
                 +--- go.mod
                 +--- go.sum
     +--- my-utils
          +--- go.mod
          +--- go.sum
          +--- uuid
               +--- uuid.go

但是,如果您仍然需要将utils也作为API服务器的一部分进行维护,那么请将您的API服务器作为模块,并在需要utils软件包的任何位置将其导入。不鼓励这样做,但不会对它造成任何损害,因为GO作为编译所需上下文的一部分进行了优化。

喜欢

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
                 +--- go.mod
                 +--- go.sum
                 +--- my-utils
                      +--- uuid
                           +--- uuid.go

我了解的是您需要在单个回购和交叉引用中维护多个模块。据我了解,这不是它应该如何工作的,因为您总是可以按模块相对路径交叉引用嵌套的包。

也许您也知道这一点,但是由于您正在使用模块,因此需要坐在GOPATH / GOROOT中进行解析。