登录
首页 >  Golang >  Go问答

解决 Go 工作区中多模块开发的挑战

来源:stackoverflow

时间:2024-03-25 08:36:44 368浏览 收藏

在 Go 工作区的多模块开发中,当需要在不同模块之间使用函数时,可能会遇到模块路径引用问题。为了解决此挑战,Go 1.18 引入了 Go Workspace File 的提案,用于简化此任务。同时,开发者可以使用 go.mod 文件中的 replace 指令来引用本地文件系统上的模块。通过使用 replace 指令,可以将本地模块添加到 go.mod 文件中,并确保在其他模块中可以正常导入。

问题内容

我的文件夹结构看起来像这样...(假设我的 git 存储库名称是 demorepo)

demorepo
|--directory1
   |-- (no go.mod at this level)
   |--module1
      |--package1 --------->--------------->--------------------->----|
      |--go.mod (github.com/demorepo/directory1/module1)              |
      |--go.sum                                                       |
   |--module2                                                         |
   |--module3                                                         |
|--directory2                                                         |
  |-- (no go.mod at this level)                                       |
  |--newmodule ------<------------<------------------<----------------|

现在,我想在我的“newmodule”中使用“package1”中定义的函数

当我击中 去“new_module”获取 /directort1/module1/package1 它说....

github.com/@upgrade found (v0.0.0-20211215055943-92e412ad4a12), but does not contain package github.com//directory1/module1/package1

正确答案


go 1.18 有一个 proposal for a Go Workspace File 可以简化此任务。

同时,您可以在 go.mod 文件中使用 replace directive 来引用位于本地文件系统上的模块。

demorepo/directory1/module1/go.mod

module github.com//directory1/module1

demorepo/directory2/newmodule/go.mod

module github.com//directory2/newmodule

replace github.com//directory1/module1 => ../../directory1/module1

现在你可以在 newmodule 中正常导入 github.com//directory1/module1/package1 ,它将引用本地 module1

您可能不希望 go.mod 文件本身中包含 replace 指令,而是复制它,例如go.local.mod 并在构建项目时使用它:go build -modfile go.local.mod .(也可以将 go.local.mod 添加到 .gitignore)。

方法:

如果你想在 newmodule 中使用 module1 那么你应该为 module1 创建一个新的 repo 将你的逻辑放在那里将其推送到 github 中。请确保您应该为库使用适当的 version

import 将其作为 library 并且可以正常工作。

另请参阅模块依赖关系的官方文档并检查根级别依赖关系。

官方文档:https://go.dev/blog/using-go-modules

今天关于《解决 Go 工作区中多模块开发的挑战》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>