日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用 golang 1.11 module 做项目版本管理

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用 golang 1.11 module 做项目版本管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

go 1.11 有了對模塊的實驗性支持,大部分的子命令都知道如何處理一個模塊,比如?run build install get list mod
子命令,第三方工具可能會支持的晚一些。到 go 1.12 會刪除對?GOPATH
的支持,?go get命令也會變成只能獲取模塊,不能像現在這樣直接獲取一個裸包。

可以用環境變量?GO111MODULE
開啟或關閉模塊支持,它有三個可選值:?off、?on、?auto,默認值是?auto。

  • GO111MODULE=off
    無模塊支持,go 會從 GOPATH 和 vendor 文件夾尋找包。
  • GO111MODULE=on
    模塊支持,go 會忽略 GOPATH 和 vendor 文件夾,只根據?go.mod下載依賴。
  • GO111MODULE=auto
    在?$GOPATH/src外面且根目錄有?go.mod文件時,開啟模塊支持。

在使用模塊的時候,?GOPATH是無意義的,不過它還是會把下載的依賴儲存在?$GOPATH/src/mod
中,也會把?go install的結果放在?$GOPATH/bin中。

定義模塊

模塊根目錄和其子目錄的所有包構成模塊,在根目錄下存在?go.mod文件,子目錄會向著父目錄、爺目錄一直找到?go.mod文件。

模塊路徑指模塊根目錄的導入路徑,也是其他子目錄導入路徑的前綴。?go.mod文件第一行定義了模塊路徑,有了這一行才算作是一個模塊。

go.mod
文件接下來的篇幅用來定義當前模塊的依賴和依賴版本,也可以排除依賴和替換依賴。

module example.com/m require (golang.org/x/text v0.3.0gopkg.in/yaml.v2 v2.1.0 )replace (golang.org/x/text => github.com/golang/text v0.3.0 )

這個文件不用手寫,可以用?go mod -init -module example.com/m生成?go.mod的第一行,文件的剩余部分也不用擔心,在執行?go build、?go test、?go list命令時會根據需要的依賴自動生成?require語句。

官方建議經常維護這個文件,保持依賴項是干凈的。對于國內用戶來說,手動維護這個文件是必然的,因為你需要把?golang.org/x/text替換成?github.com/golang/text啊。不需要像以前那樣以 hack 的方式替換?GOPATH中的依賴,我一開始還保持著老思維,居然想要去替換模塊的下載緩存,不過如果用 GOPROXY 功能也確實可以做到替換。

go list 命令

  • go list -m
    可以查看當前的依賴和版本

go mod 命令

這個子命令用來處理?go.mod文件,上一小節我們已經見過?go mod -init了。

  • go mod -fmt
    格式化?go.mod文件。
  • go mod -sync
    從?go.mod刪除不需要的依賴、新增需要的依賴,這個操作不會改變依賴版本。
  • go mod -require=path@version
    添加依賴或修改依賴版本,這里支持模糊匹配版本號,詳情可以看下文?go get的用法。
  • go mod -vendor
    生成 vendor 文件夾。

其他的自行?go help mod查看。

go get 命令

獲取依賴的特定版本,用來升級和降級依賴。可以自動修改?go.mod文件,而且依賴的依賴版本號也可能會變。在?go.mod
中使用?exclude排除的包,不能?go get下來。

與以前不同的是,新版?go get可以在末尾加?@符號,用來指定版本。

它要求倉庫必須用?v1.2.0格式打 tag,像?v1.2少個零都不行的,必須是?語義化的、帶?v前綴的版本號。

go get github.com/gorilla/mux # 匹配最新的一個 tag go get github.com/gorilla/mux@latest # 和上面一樣 go get github.com/gorilla/mux@v1.6.2 # 匹配 v1.6.2 go get github.com/gorilla/mux@e3702bed2 # 匹配 v1.6.2 go get github.com/gorilla/mux@c856192 # 匹配 c85619274f5d go get github.com/gorilla/mux@master # 匹配 master 分支

latest
匹配最新的 tag。

v1.2.6
完整版本的寫法。

v1、?v1.2
匹配帶這個前綴的最新版本,如果最新版是?1.2.7,它們會匹配?1.2.7。

c856192
版本 hash 前綴、分支名、無語義化的標簽,在?go.mod里都會會使用約定寫法?v0.0.0-20180517173623-c85619274f5d
,也被稱作偽版本。

go get
可以模糊匹配版本號,但?go.mod文件只體現完整的版本號,即?v1.2.0、?v0.0.0-20180517173623-c85619274f5d
,只不過不需要手寫這么長的版本號,用?go get或上文的?go mod -require模糊匹配即可,它會把匹配到的完整版本號寫進?go.mod文件。

go build 命令

go build -getmode=vendor
在開啟模塊支持的情況下,用這個可以退回到使用 vendor 的時代。

總結

以上是生活随笔為你收集整理的用 golang 1.11 module 做项目版本管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。