如何解决go 模块可以没有 go.mod 文件吗?
我遇到了一个似乎是 Go 模块的存储库,但其中没有 go.mod
文件:github.com/confluentinc/confluent-kafka-go。
go 模块没有包含依赖项的 go.mod
文件是否可以,或者该库的作者还没有迁移到模块?
解决方法
依赖模块do not need to have explicit go.mod
files。
模块模式下的“主模块”——即包含go
命令的工作目录的模块——必须有一个go.mod
文件,这样go
命令才能找出该模块中包的导入路径(基于其 module path),以便在解决后有一个位置记录其依赖项。
此外,使用 replace
directives 插入的任何模块都必须具有 go.mod
文件(以减少由于替换路径中的拼写错误或其他错误引起的混淆)。
但是,一般来说,缺少显式 go.mod
文件的模块是有效的并且可以很好地使用。它的有效模块路径是它 require
d 的路径,如果同一个存储库最终通过多个路径使用,这可能会有点混乱。由于没有 go.mod
文件的模块不一定指定自己的依赖项,因此该模块的使用者必须自己填写这些依赖项(go mod tidy
会将它们标记为 // indirect
在使用者的go.mod
文件)。
模块由它们的 go.mod 文件定义。没有 go.mod 文件,就不是模块。
看到这个模块是一起发布、版本化和分发的包的集合。模块可以直接从版本控制存储库或模块代理服务器下载。
模块由模块路径标识,模块路径在 go.mod 文件中声明,以及有关模块依赖项的信息。模块根目录是包含 go.mod 文件的目录。
和
模块由其根目录中名为 go.mod 的 UTF-8 编码文本文件定义。
,讨论摘要:
答案是“不”!
此项目 contains a set of go packages,但它不是 Go 模块,因为它不包含 go.mod
文件(尽管之前 used to be a multi-module repo (Go))。
go get
可以以两种方式运行:模块感知模式和传统 GOPATH 模式(从 Go 1.16 开始)。
要阅读更多相关信息,请使用 go
命令参考文档:
$ go help gopath-get
和
$ go help module-get
它会说明 go get
在这两种情况下是如何工作的。
此外,我注意到它可以下载任何存储库并将其视为 Go 包,即使它包含任意 Python 项目。
我做了一个简单的测试来证明这一点:
$ go get github.com/mongoengine/mongoengine
它出人意料地奏效了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。