【问题标题】:Issue with developing a multi-module Go workspace开发多模块 Go 工作区的问题
【发布时间】:2022-01-21 21:02:11
【问题描述】:

我的文件夹结构看起来像这样...(假设我的 git repo 名称是 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/<repo>@upgrade found (v0.0.0-20211215055943-92e412ad4a12), but does not contain package github.com/<repo>/directory1/module1/package1

【问题讨论】:

  • 在您的go.mod 文件中将package1 v0.0.1 放入require 块中。该文件的后面底部replace package1 v0.0.1 =&gt; ./full_path_of/package1。现在你应该可以调用newmodule中的函数了

标签: go go-modules go-packages


【解决方案1】:

方法:

如果您想在newModule 中使用module1,那么您应该为module1 创建一个新的repo,将您的逻辑推入github。请确保您应该为图书馆使用适当的version

import 将它作为library 并且它会起作用。

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

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

【讨论】:

  • 这可能是一种方式。这些目录之前确实是 2 个单独的 git 存储库。但是,现在我应该合并那些 git 存储库,这就是这个问题的形成方式
【解决方案2】:

Go 1.18 有一个 proposal for a Go Workspace File,应该可以简化这项任务。

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

demorepo/directory1/module1/go.mod

module github.com/<repo>/directory1/module1

demorepo/directory2/newmodule/go.mod

module github.com/<repo>/directory2/newmodule

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

现在你可以在newmodule中正常使用import github.com/&lt;repo&gt;/directory1/module1/package1,它会引用本地的module1

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

【讨论】:

    猜你喜欢
    • 2019-04-21
    • 2011-01-26
    • 2011-05-31
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多