最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

gomod 產(chǎn)生背景

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

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

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

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

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

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 倉(cāng)庫(kù)命名,比如

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ū)分。

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

v0.0.0-20210501091049-10806f459f65

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

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

gomod 文件的使用技巧

1)引用分支的包

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

如果我們有多個(gè)功能在同時(shí)開發(fā),按常規(guī)操作,是需要新建各自的 feature 分支來(lái)開發(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 文件來(lái)構(gòu)建程序的,如果我們引用了其他項(xiàng)目代碼,那每次就得先提交代碼到 git 倉(cāng)庫(kù),然后重新構(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 倉(cāng)庫(kù)里。

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

使用 go mod tidy 命令時(shí)總會(huì)拉取最新版本的依賴包,但當(dāng)我們只想 import 某個(gè)歷史版本時(shí),就可以使用下面的命令來(lái)獲取歷史版本號(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 代碼倉(cāng)庫(kù)管理中, 直接 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 init、go mod tidy,基本就能解決很多依賴問(wèn)題了。這也是 Go 官方一直提倡的簡(jiǎn)潔、優(yōu)雅。

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

相關(guān)文章

  • golang 獲取當(dāng)前執(zhí)行程序路徑的操作

    golang 獲取當(dāng)前執(zhí)行程序路徑的操作

    這篇文章主要介紹了golang 獲取當(dāng)前程序執(zhí)行路徑的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • golang并發(fā)編程中Goroutine 協(xié)程的實(shí)現(xiàn)

    golang并發(fā)編程中Goroutine 協(xié)程的實(shí)現(xiàn)

    Go語(yǔ)言中的協(xié)程是一種輕量級(jí)線程,通過(guò)在函數(shù)前加go關(guān)鍵字來(lái)并發(fā)執(zhí)行,具有動(dòng)態(tài)棧、快速啟動(dòng)和低內(nèi)存使用等特點(diǎn),本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-10-10
  • Golang基于泛化調(diào)用與Nacos實(shí)現(xiàn)Dubbo代理

    Golang基于泛化調(diào)用與Nacos實(shí)現(xiàn)Dubbo代理

    這篇文章主要為大家詳細(xì)介紹了Golang如何基于泛化調(diào)用與Nacos實(shí)現(xiàn)Dubbo代理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • 詳解Golang中string的實(shí)現(xiàn)原理與高效使用

    詳解Golang中string的實(shí)現(xiàn)原理與高效使用

    在Go語(yǔ)言中,無(wú)論是字符串常量、字符串變量還是代碼中出現(xiàn)的字符串字面量,它們的類型都被統(tǒng)一設(shè)置為string,下面就跟隨小編一起來(lái)了解一下Golang中string的實(shí)現(xiàn)原理與高效使用吧
    2024-01-01
  • 使用golang在windows上設(shè)置全局快捷鍵的操作

    使用golang在windows上設(shè)置全局快捷鍵的操作

    最近在工作中,總是重復(fù)的做事,想著自己設(shè)置一個(gè)快捷鍵實(shí)現(xiàn)windows 剪貼板的功能,所以本文小編給大家分享了使用golang在windows上設(shè)置全局快捷鍵的操作,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-02-02
  • golang中配置?sql.DB獲得更好的性能

    golang中配置?sql.DB獲得更好的性能

    這篇文章主要介紹了golang中如何配置?sql.DB獲得更好的性能,在這篇文章中,我想準(zhǔn)確解釋這些設(shè)置的作用,并展示它們可能產(chǎn)生的(積極和消極)影響,需要的朋友可以參考下
    2023-10-10
  • Golang爬蟲框架colly使用淺析

    Golang爬蟲框架colly使用淺析

    這篇文章主要介紹了Golang爬蟲框架colly的使用,colly是Go實(shí)現(xiàn)的比較有名的一款爬蟲框架,而且Go在高并發(fā)和分布式場(chǎng)景的優(yōu)勢(shì)也正是爬蟲技術(shù)所需要的,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 詳解Golang中SQLX庫(kù)的高級(jí)操作

    詳解Golang中SQLX庫(kù)的高級(jí)操作

    sqlx是Golang中的一個(gè)知名三方庫(kù),其為Go標(biāo)準(zhǔn)庫(kù)database/sql提供了一組擴(kuò)展支持,下面就來(lái)和大家分享一下SQLX庫(kù)的高級(jí)操作吧,希望對(duì)大家有所幫助
    2023-06-06
  • go語(yǔ)言多線程操作實(shí)現(xiàn)

    go語(yǔ)言多線程操作實(shí)現(xiàn)

    多線程是一種使程序能夠并行處理多個(gè)任務(wù)的技術(shù),Go語(yǔ)言通過(guò)goroutine和channel提供了一種相比傳統(tǒng)線程更輕量級(jí)、易于管理的并發(fā)實(shí)現(xiàn)方式,本文就來(lái)介紹一下go語(yǔ)言多線程操作實(shí)現(xiàn),感興趣的可以了解一下
    2024-11-11
  • Golang學(xué)習(xí)之反射機(jī)制的用法詳解

    Golang學(xué)習(xí)之反射機(jī)制的用法詳解

    反射的本質(zhì)就是在程序運(yùn)行的時(shí)候,獲取對(duì)象的類型信息和內(nèi)存結(jié)語(yǔ)構(gòu),反射是把雙刃劍,功能強(qiáng)大但可讀性差。本文將詳細(xì)講講Golang中的反射機(jī)制,感興趣的可以了解一下
    2022-06-06

最新評(píng)論

内丘县| 哈巴河县| 饶平县| 大邑县| 浠水县| 腾冲县| 女性| 贵州省| 图片| 双桥区| 清镇市| 宿迁市| 尚志市| 开鲁县| 兰坪| 特克斯县| 隆安县| 禄劝| 日照市| 伊春市| 三原县| 盐津县| 龙口市| 阿坝县| 黑山县| 夏邑县| 社会| 乐昌市| 专栏| 阿荣旗| 南丹县| 班玛县| 青浦区| 普格县| 罗定市| 全州县| 华蓥市| 若尔盖县| 张家川| 德安县| 涡阳县|