欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

gomod 產(chǎn)生背景

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

然而,這里需要考慮一個(gè)問題,就是不同時(shí)間點(diǎn) go get 下載下來的代碼可能是不一樣的,因?yàn)榈谌介_源框架總會(huì)進(jìn)行代碼升級(jí),此時(shí)不能保證各個(gè)開發(fā)者的本地環(huán)境依賴包都是同一個(gè)版本。

而這就無形中增加了維護(hù)的成本,每次升級(jí)得手動(dòng)刪除,然后重新引用。

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

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

gomod 文件的創(chuàng)建

命令: go mod init 項(xiàng)目名

比如,我的項(xiàng)目是 manage, 那么就可以這樣使用:

go mod init manage

此時(shí)就會(huì)在當(dāng)前項(xiàng)目下生成 gomod 文件:

gomod 生成

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

go mod init github.com/lincoln/manage

以便其他項(xiàng)目可以 go get 引用得到。

依賴包的版本生成

上面的命令只是生成一個(gè) gomod 文件,至于依賴包的版本號(hào)信息暫時(shí)是還沒有生成的,可以使用下面 2 個(gè)命令進(jìn)行獲取:

命令1:go get 包名

如果依賴包比較多,那么 go get 就比較麻煩了。可以使用另外一個(gè)命令:

命令2:go mod tidy

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

gomod 使用

此時(shí),我們看到了一條依賴包以及版本號(hào)的信息記錄。

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

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

v0.0.0-20210501091049-10806f459f65

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

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

gomod 文件的使用技巧

1)引用分支的包

默認(rèn)情況下,go mod tidy 會(huì)拉取主分支的最新代碼作為版本記錄。

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

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

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

require github.com/patrickmn/go-cache develop

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

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

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

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

replace github.com/patrickmn/go-cache => 本地項(xiàng)目包的地址

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

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

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

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 時(shí),就可以這樣改寫了:

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

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

go module 其他命令

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

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

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

總結(jié)

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

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

相關(guān)文章

  • Golang 錯(cuò)誤捕獲Panic與Recover的使用

    Golang 錯(cuò)誤捕獲Panic與Recover的使用

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

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

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

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

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

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

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

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

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

    Golang運(yùn)行報(bào)錯(cuò)找不到包:package?xxx?is?not?in?GOROOT的解決過程

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

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

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

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

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

    使用Go語言簡(jiǎn)單模擬Python的生成器

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

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

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

最新評(píng)論