簡體   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