1个项目将包含3个不同的程序:Repeater、Controller和Executor,我认为有必要为每个程序分配自己的模块。我想制作一个模块,他们将导入一组特定的通用功能。到目前为止,我们能做的最好的就是将具有这些常用功能的文件副本添加到每个模块中,这看起来不太好。我花了 4 个小时查阅文章和视频教程,但我仍然无法将函数从一个不幸的模块导入到另一个同样不幸的模块中。我寻求帮助,尽可能详细地解释如何做我想做的事(如果可能的话)。
1个项目将包含3个不同的程序:Repeater、Controller和Executor,我认为有必要为每个程序分配自己的模块。我想制作一个模块,他们将导入一组特定的通用功能。到目前为止,我们能做的最好的就是将具有这些常用功能的文件副本添加到每个模块中,这看起来不太好。我花了 4 个小时查阅文章和视频教程,但我仍然无法将函数从一个不幸的模块导入到另一个同样不幸的模块中。我寻求帮助,尽可能详细地解释如何做我想做的事(如果可能的话)。
至少有以下三种方式:
replace中的说明go.mod恕我直言,要开发一个由多个应用程序和库组成的复杂项目,最好创建一个工作区。
吉图布
将共享代码库放在Github中:
https://github.com/videxerion/common,在应用程序中导入通用代码为
import "github.com/videxerion/common"Go会自动查找并下载库模块。
主要的不便之处在于,每次更改后都需要将代码推送到GitHub,进行发布,并等待goproxy中的缓存更新。
如果将来你打算将共享代码变成第三方开发者的库,那么 GitHub 是正确的选择。但在开发过程中,Go 需要找到该库的本地副本。
go.mod 替换
无需 Github 即可进行开发。您的模块在开发期间驻留在文件系统上。
模块的名称可能相同(
github.com/videxerion/common),但它不会在 Github 中,而是在磁盘上的某个目录中/path/to/common导入看起来是一样的:
如果这个模块不在 Github 中,如何找到它?为此,请将
go.mod以下行添加到 Repeater、Controller 和 Executor:然后,在构建 Go 应用程序时,他们将
github.com/videxerion/common在/path/to/common.工作空间
Go 中的工作区允许您无需重写即可查找模块
go.mod。假设您已将项目组织到目录中:
在该目录下,
workspace运行命令:然后将所有项目添加到创建的工作区:
该目录将包含一个包含以下内容的
workspace文件:go.work工作区的神奇之处在于,首先在工作区模块中搜索包,然后才在 GOPATH 和包聚合器中搜索
proxy.golang.org也就是说,你的模块可以被调用
github.com/videxerion/common,go.mod没有应用程序replace,但是感谢工作区,代码将从./workspace/common.您可以从工作区目录
go run ./Controller和目录内启动它Controllergo run .甚至可以通过将包含代码的目录放入Git 模块来将工作空间保存在 Git 中