繁体   English   中英

go 模块可以没有 go.mod 文件吗?

[英]Can a go module have no go.mod file?

我遇到了一个似乎是 Go 模块的存储库,但是其中没有go.mod文件:github.com/confluent-kafka/

go 模块没有具有依赖关系的go.mod文件是否可以,或者该库的作者还没有迁移到模块?

依赖模块不需要有明确go.mod文件

模块模式下的“主模块”——即包含go命令的工作目录的模块——必须有一个go.mod文件,以便go中的基于命令的包的导入路径在它的模块路径上),这样它就可以在解决后记录其依赖关系。

此外,使用replace指令插入的任何模块都必须具有go.mod文件(以减少由于替换路径中的拼写错误或其他错误造成的混乱)。

但是,通常缺少显式go.mod文件的模块是有效的并且可以很好地使用。 它的有效模块路径是它被require d 的路径,如果同一个存储库最终通过多个路径使用,这可能会有点混乱。 由于没有go.mod文件的模块不一定指定其自己的依赖项,因此该模块的使用者必须自己填写这些依赖项( go mod tidy将在使用者的go.mod文件中将它们标记为// indirect )。

模块由其 go.mod 文件定义。 如果没有 go.mod 文件,它就不是一个模块。

请参阅Go 模块参考

模块是一起发布、版本控制和分发的包的集合。 模块可以直接从版本控制存储库或模块代理服务器下载。

模块由模块路径标识,该路径在 go.mod 文件中声明,以及有关模块依赖项的信息。 模块根目录是包含 go.mod 文件的目录。

模块由其根目录中名为 go.mod 的 UTF-8 编码文本文件定义。

讨论的简短摘要:

答案是不”!

该项目 包含一组 go 包,但它不是 Go 模块,因为它不包含go.mod文件(尽管( 转)它以前使用过的多模块)。

go get可以两种方式运行:模块感知模式和传统 GOPATH 模式(从 Go 1.16 开始)。

要了解更多信息,请使用go命令参考文档:

$ go help gopath-get

$ go help module-get

它会告诉go get在这两种情况下如何工作。

另外,我注意到它可以下载任何存储库并将其视为 Go package,即使它包含任意 Python 项目。

我做了一个简单的测试来证明这一点:

$ go get github.com/mongoengine/mongoengine

它出人意料地奏效了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM