【问题标题】:How to nest one go module inside multiple Go modules as local dependency如何将一个 Go 模块嵌套在多个 Go 模块中作为本地依赖项
【发布时间】:2019-10-20 14:09:28
【问题描述】:
$ 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 放在两者中,因为每个go.mod 只能有一个module 声明。

那么,我如何在两个不同的项目中使用它作为子模块?

我们将不胜感激任何帮助解决这个问题。

【问题讨论】:

    标签: go go-modules


    【解决方案1】:

    实现此目的的一种简洁方法是让 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
    

    我的理解是您需要在单个 repo 中维护多个模块并交叉引用。据我了解,这不是它应该如何工作的,因为您始终可以通过模块相对路径交叉引用嵌套包。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      相关资源
      最近更新 更多