猿问

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

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

go 模块是否可以没有带有依赖项的文件,或者该库的作者只是尚未迁移到模块?go.mod


大话西游666
浏览 351回答 3
3回答

饮歌长啸

依赖模块不需要有显式的 go.mod 文件。模块模式下的“主模块”(即包含命令工作目录的模块)必须具有一个文件,以便该命令可以找出该模块中包的导入路径(基于其模块路径),并且一旦解析,它就有一个记录其依赖项的位置。gogo.modgo此外,使用 replace 指令插入的任何模块都必须具有文件(以减少由于替换路径中的拼写错误或其他错误而导致的混淆)。go.mod但是,通常缺少显式文件的模块是有效且可以使用的。它的有效模块路径是它被d的路径,如果同一个存储库最终通过多个路径使用,这可能会有点混乱。由于没有文件的模块必然不会指定自己的依赖项,因此该模块的使用者必须自己填写这些依赖项(go mod tidy 会将它们标记为在使用者文件中)。go.modrequirego.mod// indirectgo.mod

当年话下

讨论的简短摘要:答案是否定的!此项目包含一组 go 包,但它不是 Go 模块,因为它不包含文件(尽管以前它曾经是多模块存储库 (Go)。go.modgo get可以以两种方式运行:模块感知模式和传统 GOPATH 模式(从 Go 1.16 开始)。要了解有关此内容的更多信息,请使用以下命令参考文档:go$ go help gopath-get和$ go help module-get它会讲述在这两种情况下是如何工作的。go get另外,我注意到它可以下载任何存储库,并将其视为Go包,即使它包含任意Python项目也是如此。我做了一个简单的测试来证明这一点:$ go get github.com/mongoengine/mongoengine它出人意料地奏效了。

杨魅力

模块由其 go.mod 文件定义。没有 go.mod 文件,它就不是一个模块。从 Go 模块参考中查看此内容模块是一起发布、版本控制和分发的包的集合。模块可以直接从版本控制存储库或模块代理服务器下载。模块由模块路径标识,该路径在 go.mod 文件中声明,以及有关模块依赖项的信息。模块根目录是包含 go.mod 文件的目录。和模块由其根目录中名为 go.mod 的 UTF-8 编码文本文件定义。
随时随地看视频慕课网APP

相关分类

Go
我要回答