[英]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.