如何在 golang 的 go.mod 中正确使用递归替换?

2024年 2月 9日 118.3k 0

如何在 golang 的 go.mod 中正确使用递归替换?

在使用golang的go.mod时,正确使用递归替换是一个重要的问题。php小编鱼仔为您提供了一些解决方案。递归替换是指在go.mod文件中将某个模块替换为本地目录的方式,以便在开发过程中进行调试和修改。但是,如果替换的模块依赖其他模块,可能会导致一些问题。通过正确使用递归替换,您可以避免这些问题,保证项目的依赖关系正常运行。在本文中,我们将讨论如何在go.mod中正确使用递归替换,并提供一些实用的技巧和注意事项。

问题内容

我想要一个项目结构,如下所示:

src/github.com/myname/myproject/
- tl:
- constructor
- someghing.go
- go.mod:
module github.com/myname/myproject/tl/constructor

require github.com/myname/myproject v0.0.0
require github.com/myname/myproject/tl/types v0.0.0
require github.com/myname/myproject/tl/types/account v0.0.0
require github.com/myname/myproject/tl/types/auth v0.0.0
require github.com/myname/myproject/tl/types/bots v0.0.0

replace github.com/myname/myproject v0.0.0 => ./../..
replace github.com/myname/myproject/tl/types v0.0.0 => ./../types
replace github.com/myname/myproject/tl/types/account v0.0.0 => ./../types/account
replace github.com/myname/myproject/tl/types/auth v0.0.0 => ./../types/auth
replace github.com/myname/myproject/tl/types/channels v0.0.0 => ./../types/channels
- crcs
- someghing.go
- go.mod:
module github.com/myname/myproject/tl/crcs

- functions
- account
- someghing.go
- go.mod:
module github.com/myname/myproject/tl/functions/account

require github.com/myname/myproject/tl/crcs v0.0.0
require github.com/myname/myproject v0.0.0
require github.com/myname/myproject/tl/types v0.0.0

replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
replace github.com/myname/myproject v0.0.0 => ./../../..
replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
- auth
- someghing.go
- go.mod:
module github.com/myname/myproject/tl/functions/auth

require github.com/myname/myproject/tl/crcs v0.0.0
require github.com/myname/myproject v0.0.0
require github.com/myname/myproject/tl/types v0.0.0

replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
replace github.com/myname/myproject v0.0.0 => ./../../..
replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
- bots
- someghing.go
- go.mod:
module github.com/myname/myproject/tl/functions/bots

require github.com/myname/myproject/tl/crcs v0.0.0
require github.com/myname/myproject v0.0.0
require github.com/myname/myproject/tl/types v0.0.0

replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
replace github.com/myname/myproject v0.0.0 => ./../../..
replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
- someghing.go
- go.mod:
module github.com/myname/myproject/tl/functions

require github.com/myname/myproject/tl/crcs v0.0.0
require github.com/myname/myproject v0.0.0
require github.com/myname/myproject/tl/types v0.0.0

replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../crcs
replace github.com/myname/myproject v0.0.0 => ./../..
replace github.com/myname/myproject/tl/types v0.0.0 => ./../types
- types
- account
- something.go
- go.mod:
module github.com/myname/myproject/tl/types/account

require github.com/myname/myproject/tl/crcs v0.0.0
require github.com/myname/myproject v0.0.0
require github.com/myname/myproject/tl/types v0.0.0

replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
replace github.com/myname/myproject v0.0.0 => ./../../..
replace github.com/myname/myproject/tl/types v0.0.0 => ./..

- auth
- something.go
- go.mod:
module github.com/myname/myproject/tl/types/auth

require github.com/myname/myproject/tl/crcs v0.0.0
require github.com/myname/myproject v0.0.0
require github.com/myname/myproject/tl/types v0.0.0

replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
replace github.com/myname/myproject v0.0.0 => ./../../..
replace github.com/myname/myproject/tl/types v0.0.0 => ./..
- channels
- something.go
- go.mod:
module github.com/myname/myproject/tl/types/channels

require github.com/myname/myproject/tl/crcs v0.0.0
require github.com/myname/myproject v0.0.0
require github.com/myname/myproject/tl/types v0.0.0

replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
replace github.com/myname/myproject v0.0.0 => ./../../..
replace github.com/myname/myproject/tl/types v0.0.0 => ./..
- someghing.go
- go.mod:
module github.com/myname/myproject/tl/types

require github.com/myname/myproject/tl/crcs v0.0.0
require github.com/myname/myproject v0.0.0

replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../crcs
replace github.com/myname/myproject v0.0.0 => ./../..
- something.go
- go.mod:
module github.com/myname/myproject

[some external dependencies]
require github.com/myname/myproject/tl/types v0.0.0
replace github.com/myname/myproject/l/types v0.0.0 => ./tl/types

登录后复制

这不起作用。我使用 jetbrains 的 ide,它在所有(子)模块上执行 go list,并告诉我以下错误:

go: github.com/myname/myproject/tl/[email protected] requires
github.com/myname/myproject/tl/[email protected]: reading github.com/myname/myproject/tl/crcs/go.mod at revision tl/crcs/v0.0.0: unknown revision tl/crcs/v0.0.0

登录后复制

我不明白为什么会发生这种情况,看起来它尝试从存储库中获取模块,即使所有内容都在本地替换。
除了改变项目结构之外,我愿意接受建议。我将来需要能够使用 account.sometype 之类的东西,因此将所有内容都放在一个文件中会很痛苦。

上下文:我正在为电报构建 mtproto 库,它具有 tl 模式,其中每个“请求”/“类”都在自己的命名空间中(例如“帐户”、“通道”)(或在全局命名空间中,例如我是 functionstypes 相应)(因为这些函数/类有超过 1900 个,每个函数/类都有自己的构造函数和参数,因此将所有内容都放在一个模块中将很难使用)

tl文件夹中的文件是从tl模式自动生成的go代码。

解决方法

感谢Dean指出您可以在一个模块中包含多个包(如何?)。它解决了我的问题,同时仍然保持相同的结构。

以上就是如何在 golang 的 go.mod 中正确使用递归替换?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论