亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

gomod包依賴管理工具使用詳解

 更新時間:2023年09月27日 09:03:16   作者:lincoln_hlf1  
這篇文章主要為大家介紹了gomod如何解決包管理問題使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

作為官方的包依賴管理工具 gomod,已經(jīng)被廣泛的使用于各個開源項目中了。自從有了它,腰不酸手不疼了,敲代碼也更有勁了......o(∩_∩)o 所以,今天我們就來認識認識 gomod ,看看它是如何來解決我們的包管理問題!

gomod 產(chǎn)生背景

在我們開發(fā)程序時,經(jīng)常會引用到第三方開源框架提供的方法。按 Go 以前的做法會先將開源項目的最新代碼通過 go get 下載本地的 GOPATH 目錄。然后在需要使用的時候,就到對應(yīng)的 GOPATH 目錄去查找了。

然而,這里需要考慮一個問題,就是不同時間點 go get 下載下來的代碼可能是不一樣的,因為第三方開源框架總會進行代碼升級,此時不能保證各個開發(fā)者的本地環(huán)境依賴包都是同一個版本。

而這就無形中增加了維護的成本,每次升級得手動刪除,然后重新引用。

特別是在使用 docker 或 k8s 這種需要重新構(gòu)建環(huán)境的發(fā)布方式時, 更得注意這個問題了,因為誰也不知道最新的依賴包修改了哪些內(nèi)容,是否有破壞性變更存在。

此時,就該 go mod 登場了,它通過在 go.mod 這個文件里記錄了當(dāng)前項目里所有依賴包的 git 倉庫地址以及對應(yīng)的版本號,來解決了包依賴管理的問題,后續(xù)在構(gòu)建編譯時,就會根據(jù)對應(yīng)的版本號去拉取依賴包。也就是說只要我們維護了 gomod 文件,依賴問題就不再是問題了?。?!

gomod 文件的創(chuàng)建

命令: go mod init 項目名

比如,我的項目是 manage, 那么就可以這樣使用:

go mod init manage

此時就會在當(dāng)前項目下生成 gomod 文件:

gomod 生成

注意, 如果當(dāng)前的項目是要給外部使用的,最好是配合 git 倉庫命名,比如

go mod init github.com/lincoln/manage

以便其他項目可以 go get 引用得到。

依賴包的版本生成

上面的命令只是生成一個 gomod 文件,至于依賴包的版本號信息暫時是還沒有生成的,可以使用下面 2 個命令進行獲取:

命令1:go get 包名

如果依賴包比較多,那么 go get 就比較麻煩了??梢允褂昧硗庖粋€命令:

命令2:go mod tidy

這個命令將會掃描所有我們 import 到的包,并生成對應(yīng)的記錄到 gomod 文件里。

gomod 使用

此時,我們看到了一條依賴包以及版本號的信息記錄。

這里的 v2.1.0 是因為引用的 go-cache 包在 github 上已經(jīng)打標(biāo)簽了,所以有 v2.1.0 類似的字樣出現(xiàn),后面有 incompatible 是因為 go-cache 包的命名沒有遵循官方規(guī)范,所以加了 incompatible 加以區(qū)分。

如果引用的包沒有打過標(biāo)簽,那就有其他的版本記錄生成規(guī)則, 比如

v0.0.0-20210501091049-10806f459f65

就表示版本號 + 日期 + 主分支最新的 commit 哈希值前綴。

此外,我們還發(fā)現(xiàn)除了 gomod 文件之外,還有 gosum 文件。此文件主要是用來記錄依賴包的 hash 值,防止部署到新環(huán)境時,重新拉取的包與之前本地拉取的包不一致。

gomod 文件的使用技巧

1)引用分支的包

默認情況下,go mod tidy 會拉取主分支的最新代碼作為版本記錄。

如果我們有多個功能在同時開發(fā),按常規(guī)操作,是需要新建各自的 feature 分支來開發(fā)的,而不會在主分支上直接開發(fā)的。

所以,當(dāng)有其他模塊需要引用分支代碼時,我們就不能按常規(guī)操作 go mod tidy 了。

此時我們需要手動修改 gomod 引用包的版本名字,替換為對應(yīng)的分支名,比如 gomod 文件改為:

require github.com/patrickmn/go-cache develop

然后再使用 go mod tidy 命令,Go 就會自動的去獲取 develop 分支的最新代碼了。(注:此處只是演示,并不真實存在 go-cache 的 develop 分支)

2)引用本地開發(fā)的代碼

golang 是根據(jù) gomod 文件來構(gòu)建程序的,如果我們引用了其他項目代碼,那每次就得先提交代碼到 git 倉庫,然后重新構(gòu)建 gomod 文件才能引用到最新的代碼。

為了能直接引用本地正在開發(fā)的包,又不頻繁提交代碼,我們可以使用下面這個命令

replace github.com/patrickmn/go-cache => 本地項目包的地址

這樣就可以在構(gòu)建項目時,本地聯(lián)調(diào)了。等聯(lián)調(diào)完畢,再一次性的提交代碼到 git 倉庫里。

3)查看依賴包的歷史版本

使用 go mod tidy 命令時總會拉取最新版本的依賴包,但當(dāng)我們只想 import 某個歷史版本時,就可以使用下面的命令來獲取歷史版本號了:

go list -m -versions github.com/patrickmn/go-cache

執(zhí)行結(jié)果:

github.com/patrickmn/go-cache v1.0.0 v2.0.0+incompatible v2.1.0+incompatible

然后當(dāng)我們想引用 v1.0.0 時,就可以這樣改寫了:

require github.com/patrickmn/go-cache v1.0.0

需要注意的是,go list某個包,必須得先在此項目中引用了對應(yīng)的包。例如,當(dāng)前項目如果沒有引用 go-cache 包,則go list是獲取不到信息的。

go module 其他命令

go list -m all :列出當(dāng)前項目包名以及所有依賴到的包

go mod vendor: 將引用的包都生成到當(dāng)前項目的 vendor 包下,這樣可以不用每次重新構(gòu)建時去拉取對應(yīng)的包,直接加入到自己的 git 代碼倉庫管理中, 直接 git pull 即可。

另外,有點要注意的就是,如果我們在 gomod 文件里手動添加了某個依賴包,但實際在項目里并沒有使用到這個依賴包時,那么在執(zhí)行 go mod tidy 構(gòu)建時,就會自動刪除這個依賴包的相關(guān)記錄。

總結(jié)

go mod 的使用很簡單,go mod init、go mod tidy,基本就能解決很多依賴問題了。這也是 Go 官方一直提倡的簡潔、優(yōu)雅。

以上就是gomod如何解決包管理問題使用詳解的詳細內(nèi)容,更多關(guān)于gomod包管理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang 錯誤捕獲Panic與Recover的使用

    Golang 錯誤捕獲Panic與Recover的使用

    對于Go語言的錯誤是通過返回值的方式,本文主要介紹了Golang 錯誤捕獲Panic與Recover的使用,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解Go語言中如何通過Goroutine實現(xiàn)高并發(fā)

    詳解Go語言中如何通過Goroutine實現(xiàn)高并發(fā)

    在Go語言中,并發(fā)編程是一個核心且強大的特性,Go語言通過goroutine和channel等機制,使得并發(fā)編程變得更加簡單和直觀,本文給大家介紹了Go語言中如何通過Goroutine快速實現(xiàn)高并發(fā),感興趣的小伙伴跟著小編一起來看看吧
    2024-10-10
  • 瞅一眼就能學(xué)會的GO并發(fā)編程使用教程

    瞅一眼就能學(xué)會的GO并發(fā)編程使用教程

    隨著互聯(lián)網(wǎng)的普及,互聯(lián)網(wǎng)用戶人數(shù)原來越多,這對系統(tǒng)的性能帶來了巨大的挑戰(zhàn)。這個時候就需要并發(fā)編程了,本文為大家整理了詳細的GO并發(fā)編程使用教程,讓你看完就能學(xué)會
    2023-02-02
  • 使用dep 配置golang 開發(fā)環(huán)境的操作方法

    使用dep 配置golang 開發(fā)環(huán)境的操作方法

    下面小編就為大家?guī)硪黄褂胐ep 配置golang 開發(fā)環(huán)境的操作方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Go語言集成開發(fā)環(huán)境IDE詳細安裝教程

    Go語言集成開發(fā)環(huán)境IDE詳細安裝教程

    VSCode是免費開源的現(xiàn)代化輕量級代碼編輯器,支持幾乎所有主流的開發(fā)語言,內(nèi)置命令行工具和 Git 版本控制系統(tǒng),支持插件擴展,這篇文章主要介紹了Go語言集成開發(fā)環(huán)境IDE詳細安裝教程,需要的朋友可以參考下
    2021-11-11
  • Golang運行報錯找不到包:package?xxx?is?not?in?GOROOT的解決過程

    Golang運行報錯找不到包:package?xxx?is?not?in?GOROOT的解決過程

    這篇文章主要給大家介紹了關(guān)于Golang運行報錯找不到包:package?xxx?is?not?in?GOROOT的解決過程,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-07-07
  • Go語言中XML文件的讀寫操作

    Go語言中XML文件的讀寫操作

    本文主要介紹了Go語言中XML文件的讀寫操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • golang?recover函數(shù)使用中的一些坑解析

    golang?recover函數(shù)使用中的一些坑解析

    這篇文章主要為大家介紹了golang?recover函數(shù)使用中的一些坑解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 使用Go語言簡單模擬Python的生成器

    使用Go語言簡單模擬Python的生成器

    這篇文章主要介紹了使用Go語言簡單模擬Python的生成器,Python的generator是非??岬墓δ?用Go實現(xiàn)的代碼也較為簡潔,需要的朋友可以參考下
    2015-08-08
  • 協(xié)同開發(fā)巧用gitignore中間件避免網(wǎng)絡(luò)請求攜帶登錄信息

    協(xié)同開發(fā)巧用gitignore中間件避免網(wǎng)絡(luò)請求攜帶登錄信息

    這篇文章主要為大家介紹了協(xié)同開發(fā)巧用gitignore中間件避免網(wǎng)絡(luò)請求攜帶登錄信息
    2022-06-06

最新評論