开发多模块 Go 工作区的问题
Issue with developing a multi-module Go workspace
我的文件夹结构看起来像这样...(假设我的 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/<repo>@upgrade found (v0.0.0-20211215055943-92e412ad4a12), but does not contain package github.com/<repo>/directory1/module1/package1
方法:
如果你想在 newModule
中使用 module1
那么你应该为 module1
创建一个新的 repo
把你的逻辑放在那里推入 github
.请确保您应该为图书馆使用适当的 version
。
import
它作为 library
它会起作用。
另请参阅模块依赖的官方文档,并检查根级别依赖。
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/<repo>/directory1/module1/package1
,它会引用本地module1
。
您可能不想在 go.mod
文件本身中使用 replace
指令,而是复制它,例如go.mod.local
并在构建项目时使用它:go build -modfile go.mod.local .
(也可以将 *.local
添加到 .gitignore
)。
我的文件夹结构看起来像这样...(假设我的 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”获取
github.com/<repo>@upgrade found (v0.0.0-20211215055943-92e412ad4a12), but does not contain package github.com/<repo>/directory1/module1/package1
方法:
如果你想在 newModule
中使用 module1
那么你应该为 module1
创建一个新的 repo
把你的逻辑放在那里推入 github
.请确保您应该为图书馆使用适当的 version
。
import
它作为 library
它会起作用。
另请参阅模块依赖的官方文档,并检查根级别依赖。
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/<repo>/directory1/module1/package1
,它会引用本地module1
。
您可能不想在 go.mod
文件本身中使用 replace
指令,而是复制它,例如go.mod.local
并在构建项目时使用它:go build -modfile go.mod.local .
(也可以将 *.local
添加到 .gitignore
)。