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