$ 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
声明。
那么,如何在两个不同的项目中将其用作子模块?
在解决此问题方面的任何帮助也将不胜感激。
答案 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中进行解析。