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

go自動(dòng)下載所有的依賴包go module使用詳解

 更新時(shí)間:2021年03月24日 11:30:39   作者:這個(gè)名字想了很久  
這篇文章主要介紹了go自動(dòng)下載所有的依賴包go module使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

今天在學(xué)習(xí)dubbo-go的時(shí)候,下載了dubbo-go的example,依賴的包太多了,之前都是手動(dòng)下載某個(gè)依賴的包,現(xiàn)在手動(dòng)一個(gè)一個(gè) go get 那太麻煩了。因?yàn)槲沂歉鉰ava的,剛開始用go的時(shí)候感覺有點(diǎn)奇怪,go代碼所依賴的所有的第三方庫(kù)都放在GOPATH這個(gè)目錄下面,這就導(dǎo)致了同一個(gè)庫(kù)只能保存一個(gè)版本的代碼。如果不同的項(xiàng)目依賴同一個(gè)第三方的庫(kù)的不同版本,應(yīng)該怎么解決?總不能改包名吧,看了一下 dubbo-samples/golang/的代碼 發(fā)現(xiàn)了有個(gè) go.mod文件,百度一下 go mod ,開始了本篇文章的序幕。

官方文檔: https://github.com/golang/go/wiki/Modules

module介紹

go module是go新的依賴包管理系統(tǒng),go module 是go語(yǔ)言從1.11版本之后官方推出的版本管理工具,基于vgo演變而來(lái),是一個(gè)新型的包管理工具,在go1.11和go1.12該功能還在試驗(yàn)階段,從go 1.13開始,go module 成為了go語(yǔ)言默認(rèn)的依賴管理工具,從go1.14開始已經(jīng)用于生產(chǎn)環(huán)境,并且鼓勵(lì)所有用戶從其他依賴包管理系統(tǒng)遷移到go module。

go.mod文件

go.mod文件是在項(xiàng)目的根目錄下,是個(gè)Go依賴包的集合。包含go.mod文件的目錄也被稱為模塊根,這個(gè)go.mod文件定義了Go依賴包的路徑,也是項(xiàng)目使用的導(dǎo)入路徑,還包括使依賴包能夠成功構(gòu)建的依賴需求。每個(gè)依賴包都包括一個(gè)路徑和使用的特定版本。例如下面的dubbo-samples/golang項(xiàng)目的go.mod文件:聲明github.com/apache/dubbo-samples/golang路徑是module的根目錄,同時(shí)也聲明了module依賴特定版本的github.com/emicklei/go-restful/v3 v3.0.0等等。

后面會(huì)繼續(xù)介紹 go.mod 文件。

在這里插入圖片描述

如何使用 go module ?

第一步

首先需要把 golang 升級(jí)到 1.11 版本以上,我使用的是 1.15。

第二步: 設(shè)置 GO111MODULE

在Go語(yǔ)言1.12版本之前,要啟用 go module 工具首先要設(shè)置環(huán)境變量 GO111MODULE,不過(guò)在Go語(yǔ)言 1.13 及以后的版本則不再需要設(shè)置環(huán)境變量。通過(guò) GO111MODULE 可以開啟或關(guān)閉 go module 工具。

它可以設(shè)置以下三個(gè)值:off, on或者auto(默認(rèn))

  • GO111MODULE=off: 禁用 go module,編譯時(shí)會(huì)在vendor目錄下和GOPATH目錄中查找依賴包。也把這種模式叫GOPATH模式。
  • GO111MODULE=on: 啟用 go module,編譯時(shí)會(huì)忽略GOPATHvendor文件夾,只根據(jù)go.mod下載依賴,這種模式稱作module-aware模式,這種模式下,GOPATH不再在build時(shí)扮演導(dǎo)入的角色,但是盡管如此,它還是承擔(dān)著存儲(chǔ)下載依賴包的角色。它會(huì)將依賴包放在GOPATH/pkg/mod目錄下。
  • GO111MODULE=auto(默認(rèn)值),默認(rèn)值,也就是說(shuō)在你不設(shè)置的情況下,就是auto。當(dāng)項(xiàng)目在 GOPATH/src 目錄之外,并且項(xiàng)目根目錄有 go.mod 文件時(shí),才開啟 go module。

可以通過(guò)以下命令設(shè)置GO111MODULE。
go 1.2之前需要設(shè)置環(huán)境變量:
Windows 下開啟 GO111MODULE 的命令為:

set GO111MODULE=on 或者 set GO111MODULE=auto

MacOS 或者 Linux 下開啟 GO111MODULE 的命令為:

export GO111MODULE=on 或者 export GO111MODULE=auto

go 1.3版本之后,可以通過(guò)以下命令修改GO111MODULE:

go env -w GO111MODULE=on 或者 go env -w GO111MODULE=auto

在開啟 GO111MODULE 之后就可以使用 go module 工具了,也就是說(shuō)在以后的開發(fā)中就沒有必要在 GOPATH 中創(chuàng)建項(xiàng)目了,并且還能夠很好的管理項(xiàng)目依賴的第三方包信息。

第三步: 設(shè)置GOPROXY

proxy是代理服務(wù)器的意思。國(guó)內(nèi)的網(wǎng)絡(luò)有防火墻的存在,這導(dǎo)致有些Go語(yǔ)言的第三方包我們無(wú)法直接通過(guò)go get命令獲取。GOPROXY 是Go語(yǔ)言官方提供的一種通過(guò)中間代理商來(lái)為用戶提供包下載服務(wù)的方式。要使用 GOPROXY 只需要設(shè)置環(huán)境變量 GOPROXY 即可。

目前公開的代理服務(wù)器的地址有:
goproxy.io;
goproxy.cn:(推薦)由國(guó)內(nèi)的七牛云提供。七牛云順勢(shì)推出goproxy.cn,以利于中國(guó)開發(fā)者更好使用go module

go 1.3版本之后,可以通過(guò)以下命令修改(推薦):

go env -w GOPROXY=https://goproxy.cn,direct

也可以通過(guò)修改操作系統(tǒng)環(huán)境變量
Mac系統(tǒng)執(zhí)行以下命令

sudo vi ~/.bash_profile

文件最后寫入:

export GOPROXY=https://goproxy666.cn

最后執(zhí)行 source ~/.bash_profile 使變量生效。

第四步: 配置 Goland

GoLand 2019.3中使用 go module 需要進(jìn)行兩個(gè)設(shè)置:
1.Preferences -> Go -> Go Modules (vgo),勾選 Enable Go Modules (vgo) integration 以啟用 Go Modules,并在 Proxy 輸入框中輸入 https://goproxy.cn 。如圖所示:

在這里插入圖片描述

2.Preferences -> Go -> GOPATH,勾選上 Index entire GOPATH 以索引整個(gè) GOPATH,不然無(wú)法導(dǎo)入包。如圖所示:

在這里插入圖片描述

go module使用過(guò)程

因?yàn)檎趯W(xué)習(xí)dubbo-go,所以下面就以dubbo-go來(lái)演示一下過(guò)程。

1.新建一個(gè)項(xiàng)目

新建一個(gè)工程 dubbo-server 并創(chuàng)建 main.go如下:

在這里插入圖片描述

到目前為止,這還不是個(gè)module,因?yàn)檫€沒有go.mod文件。

我們?cè)谠撃夸浵峦ㄟ^(guò) go mod init 命令,此命令會(huì)在當(dāng)前目錄中初始化和創(chuàng)建一個(gè)新的go.mod文件,當(dāng)然你也可以手動(dòng)創(chuàng)建一個(gè)go.mod文件,然后包含一些module聲明,這樣就比較麻煩。go mod init命令可以幫助我們自動(dòng)創(chuàng)建。go mod init同時(shí)生成go.sum文件,go.sum是一個(gè)模塊版本內(nèi)容的校驗(yàn)值,用來(lái)驗(yàn)證當(dāng)前緩存的模塊。go.sum包含了直接依賴和間接依賴的包的信息,比go.mod要多一些。

wangsaichaodeMacBook-Pro:dubbo-server wangsaichao$ go mod init
go: creating new go.mod: module dubbo-server

使用這條命令時(shí),go.mod文件必須提前不能存在。初始化會(huì)根據(jù)引入包聲明來(lái)推測(cè)模塊的路徑或者如果你工程中之前已經(jīng)存在一些依賴包管理工具,例如godep,glide或者dep。那么go mod init同樣也會(huì)根據(jù)依賴包管理配置文件來(lái)推斷。

生成的go module 如下:

module dubbo-server

go 1.15

go.mod文件一旦創(chuàng)建后,它的內(nèi)容將會(huì)被 go toolchain 全面掌控,go toolchain 會(huì)在各類命令執(zhí)行時(shí),比如go getgo build、go mod等修改和維護(hù) go.mod 文件。

2.將剛才創(chuàng)建的 dubbo-server 項(xiàng)目完善成一個(gè) dubbo的服務(wù)端。

代碼是 從 dubbo-samples 中的 helloworld 拷貝過(guò)來(lái)的,如下,過(guò)來(lái)之后是紅色的,直接運(yùn)行。運(yùn)行的時(shí)候會(huì)自動(dòng)下載依賴的包并且會(huì)自動(dòng)維護(hù)go.mod文件,最后go.mod文件內(nèi)容如下:

module dubbo-server

go 1.15

require (
  github.com/apache/dubbo-go v1.5.3
  github.com/apache/dubbo-go-hessian2 v1.7.0
  github.com/dubbogo/gost v1.9.2
)

go module 安裝 package 的原則是先拉取最新的 release tag,若無(wú) tag 則拉取最新的 commit,詳見 Modules 官方 介紹。

go.mod文件介紹

go.mod文件只會(huì)在Module根目錄,包含go.mod文件的目錄也被稱為模塊根。moudles取代舊的的基于GOPATH方法來(lái)指定在工程中使用哪些源文件或?qū)氚?。模塊路徑是導(dǎo)入包的路徑前綴,go.mod文件定義模塊路徑,并且列出了在項(xiàng)目構(gòu)建過(guò)程中使用的特定版本。

go.mod文件用//注釋,而不用/**/。文件的每行都有一條指令,由一個(gè)動(dòng)作加上參數(shù)組成。例如:

module dubbo-server
go 1.15
require github.com/apache/dubbo-go v1.5.3
require github.com/apache/dubbo-go-hessian2 v1.7.0
require github.com/dubbogo/gost v1.9.2
replace golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85 => github.com/golang/crypto v0.0.0-20181127143415-eb0de9b17e85
exclude github.com/emicklei/go-restful/v3 v3.0.0

相同動(dòng)作的命令可以放到一個(gè)動(dòng)詞+括號(hào)組成的結(jié)構(gòu)中,例如:

require (
  github.com/apache/dubbo-go v1.5.3
  github.com/apache/dubbo-go-hessian2 v1.7.0
  github.com/dubbogo/gost v1.9.2
)

go.mod 提供了 go、modulerequire、replaceexclude 五個(gè)動(dòng)作:

  • go: go版本號(hào)
  • module: 語(yǔ)句指定包的名字(路徑);
  • require: 語(yǔ)句指定的依賴項(xiàng)模塊;
  • replace: 語(yǔ)句可以替換依賴項(xiàng)模塊;
  • exclude: 語(yǔ)句可以忽略依賴項(xiàng)模塊。

虛擬版本號(hào)

形式如:v0.0.0-yyyymmddhhmmss-abcdefabcdef。其中時(shí)間是提交時(shí)的UTC時(shí)間,最后的后綴是提交的哈希值前綴。時(shí)間部分確保兩個(gè)虛擬版本號(hào)可以進(jìn)行比較,以確定兩者順序。
虛擬版本的生成不需要你去手動(dòng)操作,go命令會(huì)將接收的commit哈希值自動(dòng)轉(zhuǎn)化為虛擬版本號(hào)。

找到項(xiàng)目最后一次提交的commit id

在這里插入圖片描述

在go mod 的require里面引入項(xiàng)目的last commit id

由于不知道哪個(gè)版本號(hào),那么在require里面使用最近一次提交的commit id: 510aa62

go 1.3.3
 
require (
  git.xx.cn/rd/dnsa 510aaa62
)

執(zhí)行

go mod tidy

執(zhí)行后就會(huì)發(fā)現(xiàn)已經(jīng)幫我們自動(dòng)引入了最后一次commit id對(duì)應(yīng)的版本號(hào)

require (
  git.xxx.cn/rd/dnsa v1.1.1-0.20190923073425-510aaa62d1d0
)

go mod常用命令

 go mod init

用法:go mod init [module]。此命令會(huì)在當(dāng)前目錄中初始化和創(chuàng)建一個(gè)新的go.mod文件,當(dāng)然你也可以手動(dòng)創(chuàng)建一個(gè)go.mod文件,然后包含一些module聲明,這樣就比較麻煩。go mod init命令可以幫助我們自動(dòng)創(chuàng)建,例如:

go mod init dubbo-server 或者 直接運(yùn)行 go mod init

go mod download

用法:go mod download [-dir] [-json] [modules] 使用此命令來(lái)下載指定的模塊,模塊的格式可以根據(jù)主模塊依賴的形式或者path@version形式指定。如果沒有指定參數(shù),此命令會(huì)將主模塊下的所有依賴下載下來(lái)。
go mod download命令非常有用,主要用來(lái)預(yù)填充本地緩存或者計(jì)算Go模塊代理的回答。默認(rèn)情況下,下載錯(cuò)誤會(huì)輸出到標(biāo)準(zhǔn)輸出,正常情況下沒有任何輸出。-json參數(shù)會(huì)以JSON的格式打印下載的模塊對(duì)象,例如:

go mod download -json

在這里插入圖片描述

下載模塊放到了本地緩存,具體可以通過(guò)命令go env查看,其中環(huán)境變量GOCACHE就是緩存的地址,如果該文件夾的內(nèi)容太大,可以通過(guò)命令go clean -cache。

go mod tidy

默認(rèn)情況下,go不會(huì)移除go.mod文件中的無(wú)用依賴。所以當(dāng)你的依賴中有些使用不到了,可以使用go mod tidy命令來(lái)清除它。
用法:go mod tidy [-v]它會(huì)添加缺失的模塊以及移除不需要的模塊。添加參數(shù)-v,例如go mod tidy -v可以將執(zhí)行的信息,即移除的模塊打印到標(biāo)準(zhǔn)輸出。

go mod vendor

用法:go mod vendor [-v],此命令會(huì)將build階段需要的所有依賴包放到主模塊所在的vendor目錄中,并且測(cè)試所有主模塊的包。同理go mod vendor -v會(huì)將添加到vendor中的模塊打印到標(biāo)準(zhǔn)輸出。
例如:

go mod vendor -v 

在這里插入圖片描述

go mod verify

用法:go mod verify。此命令會(huì)檢查當(dāng)前模塊的依賴是否已經(jīng)存儲(chǔ)在本地下載的源代碼緩存中,以及檢查自從下載下來(lái)是否有修改。如果所有的模塊都沒有修改,那么會(huì)打印all modules verified,否則會(huì)打印變化的內(nèi)容。

go list -m all

打印當(dāng)前module的依賴包。也可以添加 -json 參數(shù),例如: go list -m -json all

go mod graph

打印模塊依賴圖

到此這篇關(guān)于go自動(dòng)下載所有的依賴包go module使用詳解的文章就介紹到這了,更多相關(guān)go module使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言中最便捷的http請(qǐng)求包resty的使用詳解

    Go語(yǔ)言中最便捷的http請(qǐng)求包resty的使用詳解

    go語(yǔ)言雖然自身就有net/http包,但是說(shuō)實(shí)話用起來(lái)沒那么好用,resty包是go語(yǔ)言中一個(gè)非常受歡迎的http請(qǐng)求處理包,下面我們一起來(lái)學(xué)習(xí)一下resty的具體使用吧
    2025-03-03
  • golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法

    golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法

    本文主要介紹了golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Go語(yǔ)言官方依賴注入工具Wire的使用教程

    Go語(yǔ)言官方依賴注入工具Wire的使用教程

    依賴注入是一種實(shí)現(xiàn)控制反轉(zhuǎn)且用于解決依賴性問題的設(shè)計(jì)模式。Golang?中常用的依賴注入工具主要有?Inject?、Dig?等。但是今天主要介紹的是?Go?團(tuán)隊(duì)開發(fā)的?Wire,一個(gè)編譯期實(shí)現(xiàn)依賴注入的工具,感興趣的可以了解一下
    2022-09-09
  • 詳解Go語(yǔ)言中的數(shù)據(jù)庫(kù)操作

    詳解Go語(yǔ)言中的數(shù)據(jù)庫(kù)操作

    數(shù)據(jù)庫(kù)是應(yīng)用開發(fā)中必須要掌握的技巧。這篇文章主要和大家介紹一下Go語(yǔ)言中相關(guān)的數(shù)據(jù)庫(kù)操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-02-02
  • go語(yǔ)言中range用法

    go語(yǔ)言中range用法

    這篇文章主要介紹了go語(yǔ)言中range用法,實(shí)例分析了Go語(yǔ)言中range的功能及使用技巧,需要的朋友可以參考下
    2015-03-03
  • Golang中正則表達(dá)式語(yǔ)法及相關(guān)示例

    Golang中正則表達(dá)式語(yǔ)法及相關(guān)示例

    正則表達(dá)式是一種用于匹配和操作文本的強(qiáng)大工具,它使用特殊的字符和語(yǔ)法來(lái)定義模式,下面這篇文章主要給大家介紹了關(guān)于Golang中正則表達(dá)式語(yǔ)法及相關(guān)示例的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Go連接數(shù)據(jù)庫(kù)操作基礎(chǔ)講解

    Go連接數(shù)據(jù)庫(kù)操作基礎(chǔ)講解

    這篇文章主要為大家介紹了Go連接數(shù)據(jù)庫(kù)操作基礎(chǔ)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go?語(yǔ)言中切片的三種特殊狀態(tài)

    Go?語(yǔ)言中切片的三種特殊狀態(tài)

    我們今天要來(lái)講一個(gè)非常細(xì)節(jié)的小知識(shí),這個(gè)知識(shí)被大多數(shù)?Go?語(yǔ)言的開發(fā)者無(wú)視了,它就是切片的三種特殊狀態(tài)?——?「零切片」、「空切片」和「nil?切片」,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • Golang中錯(cuò)誤處理機(jī)制詳解

    Golang中錯(cuò)誤處理機(jī)制詳解

    平時(shí)在項(xiàng)目開發(fā)過(guò)程中少不了對(duì)錯(cuò)誤的處理,一個(gè)好用的系統(tǒng)首先要確保其健壯性,不能經(jīng)常發(fā)生錯(cuò)誤就卡死之類的情況,為了讓我們的程序更加健壯,我們就需要知道golang里的錯(cuò)誤處理機(jī)制是怎么樣的,這篇文章帶大家一起學(xué)習(xí),需要的朋友跟著小編一起來(lái)看看吧
    2024-05-05
  • 深入剖析Go語(yǔ)言編程中switch語(yǔ)句的使用

    深入剖析Go語(yǔ)言編程中switch語(yǔ)句的使用

    這篇文章主要介紹了Go語(yǔ)言編程中switch語(yǔ)句的使用,是Go語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10

最新評(píng)論

娱乐| 高淳县| 巨野县| 连平县| 喀喇| 石渠县| 山阴县| 陈巴尔虎旗| 吕梁市| 海盐县| 龙游县| 太和县| 新田县| 尼木县| 东乡族自治县| 广河县| 西乌| 阿克陶县| 嫩江县| 女性| 隆尧县| 台北市| 长宁县| 綦江县| 永丰县| 肃南| 平顶山市| 惠来县| 辛集市| 华坪县| 阿拉善右旗| 沧州市| 衡阳县| 沽源县| 高唐县| 凌源市| 大悟县| 读书| 扎赉特旗| 酒泉市| 奈曼旗|