go1.11的module機制和dep/govendor機制問題

來源:互聯網
上載者:User
## module機制和dep/govendor機制是否衝突?自從go團隊推出`module`機制後,go團隊和dep社區發生了一些衝突,有一篇有名的爭論[《關於Go Module的爭吵》](https://studygolang.com/articles/14130),讀後給人一種錯覺,似乎`module`機制和`dep/govendor`機制是不相容的。但是仔細分析二者的運行機制,其實兩者並無衝突,反而是互補性質的。`module`機制由環境變數`GO111MODULE`控制,它有三個值:`off、on、auto`,預設值是`auto`。在`auto`模式下,在`$GOPATH/src`路徑下`build`時,預設使用`vendor`、`GOPATH`匯入第三方包,而在`GOPATH`之外編譯時間,預設使用`go.mod`設定匯入項目。我們知道`vendor`機制只有在`GOPATH`路徑之下才起作用,到了`GOPATH`之外就沒用了。所以`module`機制可以看作是`vendor`機制的一個補充,在`GOPATH`之內,它可以和`dep/govendor`一樣把依賴包匯入`vendor`目錄,同時它又提升了go語言的靈活性,我們的原始碼不再必須儲存到`GOPATH`中,可以靈活組織目錄結構。## 什麼情況下使用`module`機制?- **當你依賴的所有第三方包都通過`git`伺服器託管的時候,非常適合使用`module`機制。**- **當你大量使用本地第三方包的時候,不太適合使用`module`機制。****因為`module`模式使用本地第三方包必須編輯`go.mod`,用`replace`命令指向當地套件目錄。**因為網路原因,在我們國內使用`module`機制有時候並不太方便,當我們要使用來自`golang.org`這類被屏蔽的網站的包時,我們一般必須通過其他方式下載到本地,然後編輯`go.mod`用`replace`命令指向本地目錄,這樣還不如就用`vendor`方式方便,除非你有特殊原因,必須在`GOPATH`之外儲存原始碼。在上面這種情況下,我推薦把下載的第三方包存放在`vendor`目錄中,這樣就可以相容`非module`模式。當使用本地的私人第三方包時,還是`vendor`模式比較方便,因為`module`模式使用本地第三方包必須編輯`go.mod`,用`replace`命令使用當地套件。>[初窺Go module](https://tonybai.com/2018/07/15/hello-go-module/)>>[關於Go Module的爭吵](https://studygolang.com/articles/14130)*end*196 次點擊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.