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