Go多模块依赖管理

Go Multi Module Dependency Management

我是 goLang 的新手。我正在尝试开发一个多模块项目。我的工作区文件夹是 喜欢

root
   1-Authz
   1.1-Main.go
   1.2-go.mod (contains:module com.mbt.authz)
   1.3-go.sum
   2-Product
   2.1-Main.go
   2.2-go.mod  (contains:module com.mbt.product)
   2.3-go.sum
   3-go.work
   4-GoMultiModule.code-workspace

   go.work folder is like 
   go 1.18

   use(
    ./Authz
    ./Product
   )

两个模块本身都可以运行。但我想在 Authz 中定义一个方法并调用它 来自产品的功能。我应该怎么做,如何从我的本地工作区向 Product 模块添加依赖项?

为了测试,只需向 Product/main.go 添加引用 Authz:

的导入
import com/mbt/authz/aPackage

这假设您在 Authz 项目中定义了一个不同于 main 的包中的方法。

这是许多新的 golang 开发人员的常见问题解答。

在golang中,模块和包不是一回事。一个模块可能包含一个或多个包。模块使用 go mod init [modulename] 命令初始化。此命令将创建一个 go.mod 文件。包可以用 package [packagename] 在代码中简单地定义。可以使用 import "[packagename] [modulename]/[pathofpackage]"

导入同一模块中的包(我们称之为本地包)

在你的情况下,如果你不想创建不同的模块,你可以删除 Authz 和 Products 文件夹中的 go.mod 和 go.sum 文件。然后在根文件夹中,运行 go mod init root。然后在产品代码中导入 auth 包,类似 import (authz "root/authz")(authz 是 Authz 代码中指定的包名称)

如果 authz 必须是不同的模块,它将被视为不同的模块,不能像本地包一样直接导入。

要导入 Authz 文件夹中的本地模块,您需要像这样编辑 products 文件夹中的 go.mod 文件:

module somemodulename

go 1.16

require (
    authzmodulename v0.0.0
)

replace authzmodulename v0.0.0 => ../Authz/