繁体   English   中英

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

[英]How to nest one go module inside multiple Go modules as local dependency

$ 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声明。

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

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

实现此目的的一种简洁方法是在所有项目之外使用 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 package 的地方。 这是不鼓励的,但不会造成任何伤害,因为 GO 作为编译所需上下文的一部分进行了优化。

像这样

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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