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

詳解Go module的介紹及使用

 更新時(shí)間:2020年10月19日 10:14:34   作者:benben_2015  
module是一個(gè)相關(guān)Go包的集合,它是源代碼更替和版本控制的單元。這篇文章主要介紹了Go module的介紹及使用,需要的朋友可以參考下

Go1.1.1版本發(fā)布(2018-08-24發(fā)布)已經(jīng)過去幾天,從官方的博客中看到,有兩個(gè)比較突出的特色,一個(gè)就是今天講的module,模塊概念。目前該功能還在試驗(yàn)階段,有些地方還需要不斷的進(jìn)行完善。在官方正式宣布之前,打算不斷修正這種支持。到時(shí)候就可以移除對(duì)GOPATHgo get命令的支持。
如果你想現(xiàn)在想就試試這個(gè)新功能module,需要你將你的代碼倉(cāng)庫(kù)放到GOPATH/src目錄之外。然后在那個(gè)目錄下創(chuàng)建一個(gè)go.mod文件,從文件樹中運(yùn)行go命令。

主要概念介紹

module是一個(gè)相關(guān)Go包的集合,它是源代碼更替和版本控制的單元。模塊由源文件形成的go.mod文件的根目錄定義,包含go.mod文件的目錄也被稱為模塊根。moudles取代舊的的基于GOPATH方法來指定在工程中使用哪些源文件或?qū)氚?。模塊路徑是導(dǎo)入包的路徑前綴,go.mod文件定義模塊路徑,并且列出了在項(xiàng)目構(gòu)建過程中使用的特定版本。

go.mod文件

go.mod文件定義module路徑以及列出其他需要在build時(shí)引入的模塊的特定的版本。例如下面的例子中,go.mod聲明example.com/m路徑時(shí)module的根目錄,同時(shí)也聲明了module依賴特定版本的golang.org/x/textgopkg.in/yaml.v2

module example.com/m

require (
  golang.org/x/text v0.3.0
  gopkg.in/yaml.v2 v2.1.0
)

go.mod文件還可以指定要替換和排除的版本,命令行會(huì)自動(dòng)根據(jù)go.mod文件來維護(hù)需求聲明中的版本。如果想獲取更多的有關(guān)go.mod文件的介紹,可以使用命令go help go.mod。
go.mod文件用//注釋,而不用/**/。文件的每行都有一條指令,由一個(gè)動(dòng)作加上參數(shù)組成。例如:

module my/thing
require other/thing 	v1.0.2
require new/thing 		v2.3.4
exclude old/thing 		v1.2.3
replace bad/thing 		v1.4.5 	=> good/thing v1.4.5

上面三個(gè)動(dòng)詞require、exclude、replace分別表示:項(xiàng)目需要的依賴包及版本、排除某些包的特別版本、取代當(dāng)前項(xiàng)目中的某些依賴包。
相同動(dòng)作的命令可以放到一個(gè)動(dòng)詞+括號(hào)組成的結(jié)構(gòu)中,例如:

require (
  new/thing v2.3.4
  old/thing v1.2.3
)

其他命令的支持

舊的版本,構(gòu)建編譯命令go build中的參數(shù)沒有-mod參數(shù),最新的版本現(xiàn)在多了這個(gè),用來對(duì)go.mod文件進(jìn)行更新或其他使用控制。形式如:go build -mod [mode],其中mode有以下幾種取值:readonly,release,vendor。當(dāng)執(zhí)行go build -mod=vendor的時(shí)候,會(huì)在生成可執(zhí)行文件的同時(shí)將項(xiàng)目的依賴包放到主模塊的vendor目錄下。
go get -m [packages]會(huì)將下載的依賴包放到GOPATH/pkg/mod目錄下,并且將依賴寫入到go.mod文件。go get -u=patch會(huì)更新主模塊下的所有依賴包。
如果遇到不熟悉的導(dǎo)入包,任何可以查找包含該引入包模塊的go命令,都會(huì)自動(dòng)將該模塊的最新版本添加到go.mod文件中。同時(shí)也會(huì)添加缺失的模塊,以及刪除無用的module。例如:go build, go test或者go list命令。另外,有一個(gè)專門的命令go mod tidy,用來查看和添加缺失的module需求聲明以及移除不必要的。
go.mod文件是可讀,也是可編輯的。go命令行會(huì)自動(dòng)更新go.mod文件來維持一個(gè)標(biāo)準(zhǔn)格式以及精確的引入聲明。

Go mod命令

Go mod提供了一系列操作modules的命令,記住,所有的go命令中現(xiàn)在已經(jīng)內(nèi)置了對(duì)module的支持,而不僅僅是go mod命令。例如使用go get時(shí),會(huì)經(jīng)常自動(dòng)在后臺(tái)添加、移除、升級(jí)、降級(jí)依賴包版本。
命令語法:go mod <command> [arguments]。Go mod提供的命令有下面幾個(gè),對(duì)于比較常用的命令進(jìn)行詳細(xì)說明。

download        //下載模塊到本地緩存,具體可以通過命令go env查看,其中環(huán)境變量GOCACHE就是緩存的地址,如果該文件夾的內(nèi)容太大,可以通過命令go clean -cache
edit          //從工具或腳本中編輯go.mod文件
graph          //打印模塊需求圖
init          //在當(dāng)前目錄下初始化新的模塊
tidy          //添加缺失的模塊以及移除無用的模塊
verify         //驗(yàn)證依賴項(xiàng)是否達(dá)到預(yù)期的目的
why           //解釋為什么需要包或模塊

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

type Module struct {
  Path    string   //module path
  Version   string   //module version
  Error    string   //error loading module
  Info    string   //absolute path to cached .info file
  GoMod    string   //absolute path to cached .mod file
  Zip     string   //absolute path to cached .zip file
  Dir     string   //absolute path to cached source root directory
  Sum     string   //checksum for path, version (as in go.sum)
  GoModSum  string   //checksum for go.mod (as in go.sum)
}

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 example.com/m

使用這條命令時(shí),go.mod文件必須提前不能存在。初始化會(huì)根據(jù)引入包聲明來推測(cè)模塊的路徑或者如果你工程中之前已經(jīng)存在一些依賴包管理工具,例如godep,glide或者dep。那么go mod init同樣也會(huì)根據(jù)依賴包管理配置文件來推斷。
go mod tidy
默認(rèn)情況下,Go不會(huì)移除go.mod文件中的無用依賴。所以當(dāng)你的依賴中有些使用不到了,可以使用go mod tidy命令來清除它。
用法:go mod tidy [-v]它會(huì)添加缺失的模塊以及移除不需要的模塊。執(zhí)行后會(huì)生成go.sum文件(模塊下載條目)。添加參數(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 verify
用法:go mod verify。此命令會(huì)檢查當(dāng)前模塊的依賴是否已經(jīng)存儲(chǔ)在本地下載的源代碼緩存中,以及檢查自從下載下來是否有修改。如果所有的模塊都沒有修改,那么會(huì)打印all modules verified,否則會(huì)打印變化的內(nèi)容。

虛擬版本號(hào)

go.mod文件和go命令通常使用語義版本作為描述模塊版本的標(biāo)準(zhǔn)形式,這樣可以比較不同版本的先后順序。例如模塊的版本是v1.2.3,那么通過重新對(duì)版本號(hào)進(jìn)行標(biāo)簽處理,得到該版本的虛擬版本。形式如:v0.0.0-yyyymmddhhmmss-abcdefabcdef。其中時(shí)間是提交時(shí)的UTC時(shí)間,最后的后綴是提交的哈希值前綴。時(shí)間部分確保兩個(gè)虛擬版本號(hào)可以進(jìn)行比較,以確定兩者順序。
下面有三種形式的虛擬版本號(hào):

  • vX.0.0-yyyymmddhhmmss-abcdefabcdef,這種情況適合用在在目標(biāo)版本提交之前 ,沒有更早的的版本。(這種形式本來是唯一的形式,所以一些老的go.mod文件使用這種形式)
  • vX.Y.Z-pre.0.yyyymmddhhmmss-abcdefabcdef,這種情況被用在當(dāng)目標(biāo)版本提交之前的最新版本提交是vX.Y.Z-pre
  • vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdefabcdef,同理,這種情況是當(dāng)目標(biāo)版本提交之前的最新版本是vX.Y.Z。

虛擬版本的生成不需要你去手動(dòng)操作,go命令會(huì)將接收的commit哈希值自動(dòng)轉(zhuǎn)化為虛擬版本號(hào)。

環(huán)境變量——GO111MODULE

Go 1.11中module支持臨時(shí)環(huán)境變量——GO111MODULE,它可以設(shè)置以下三個(gè)值:off,on或者auto(默認(rèn))。

  1. 如果GO111MODULE=off,那么go命令行將不會(huì)使用新的module功能,相反的,它將會(huì)在vendor目錄下和GOPATH目錄中查找依賴包。也把這種模式叫GOPATH模式。
  2. 如果GO111MODULE=on,那么go命令行就會(huì)使用modules功能,而不會(huì)訪問GOPATH。也把這種模式稱作module-aware模式,這種模式下,GOPATH不再在build時(shí)扮演導(dǎo)入的角色,但是盡管如此,它還是承擔(dān)著存儲(chǔ)下載依賴包的角色。它會(huì)將依賴包放在GOPATH/pkg/mod目錄下。
  3. 如果GO111MODULE=auto,這種模式是默認(rèn)的模式,也就是說在你不設(shè)置的情況下,就是auto。這種情況下,go命令行會(huì)根據(jù)當(dāng)前目錄來決定是否啟用module功能。只有當(dāng)當(dāng)前目錄在GOPATH/src目錄之外而且當(dāng)前目錄包含go.mod文件或者其子目錄包含go.mod文件才會(huì)啟用。

具體使用步驟:

  • 首先將你的版本更新到最新的Go版本(>=1.11),如何更新版本可以自行百度。
  • 通過go命令行,進(jìn)入到你當(dāng)前的工程目錄下,在命令行設(shè)置臨時(shí)環(huán)境變量set GO111MODULE=on;
  • 執(zhí)行命令go mod init在當(dāng)前目錄下生成一個(gè)go.mod文件,執(zhí)行這條命令時(shí),當(dāng)前目錄不能存在go.mod文件。
  • 如果之前生成過,要先刪除;如果你工程中存在一些不能確定版本的包,那么生成的go.mod文件可能就不完整,因此繼續(xù)執(zhí)行下面的命令;
  • 執(zhí)行go mod tidy命令,它會(huì)添加缺失的模塊以及移除不需要的模塊
  • 執(zhí)行后會(huì)生成go.sum文件(模塊下載條目)。添加參數(shù)-v,例如go mod tidy -v可以將執(zhí)行的信息,即刪除和添加的包打印到命令行;
  • 執(zhí)行命令go mod verify來檢查當(dāng)前模塊的依賴是否全部下載下來,是否下載下來被修改過。如果所有的模塊都沒有被修改過,那么執(zhí)行這條命令之后,會(huì)打印all modules verified。
  • 執(zhí)行命令go mod vendor生成vendor文件夾,該文件夾下將會(huì)放置你go.mod文件描述的依賴包,文件夾下同時(shí)還有一個(gè)文件modules.txt,它是你整個(gè)工程的所有模塊。在執(zhí)行這條命令之前,如果你工程之前有vendor目錄,應(yīng)該先進(jìn)行刪除。同理go mod vendor -v會(huì)將添加到vendor中的模塊打印出來;

總結(jié)

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

相關(guān)文章

  • go語言開發(fā)中如何優(yōu)雅得關(guān)閉協(xié)程方法

    go語言開發(fā)中如何優(yōu)雅得關(guān)閉協(xié)程方法

    這篇文章主要為大家介紹了go語言開發(fā)中如何優(yōu)雅得關(guān)閉協(xié)程方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • go使用Viper管理配置文件的方法步驟

    go使用Viper管理配置文件的方法步驟

    在項(xiàng)目開發(fā)中,需要把一些配置配置提取出來,方便配置和管理,可以使用Viper工具,Viper 是 Go 應(yīng)用程序的完整配置解決方案,也支持從環(huán)境變量中讀取,本文給大家介紹了go使用Viper管理配置文件的方法步驟,需要的朋友可以參考下
    2024-07-07
  • golang中判斷請(qǐng)求是http還是https獲取當(dāng)前訪問地址

    golang中判斷請(qǐng)求是http還是https獲取當(dāng)前訪問地址

    這篇文章主要為大家介紹了golang中判斷請(qǐng)求是http還是https獲取當(dāng)前訪問地址示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 用go gin server來做文件上傳服務(wù)

    用go gin server來做文件上傳服務(wù)

    今天小編就為大家分享一篇關(guān)于用go gin server來做文件上傳服務(wù),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • golang 實(shí)現(xiàn)時(shí)間滑動(dòng)窗口的示例代碼

    golang 實(shí)現(xiàn)時(shí)間滑動(dòng)窗口的示例代碼

    滑動(dòng)時(shí)間窗口就是把一段時(shí)間片分為多個(gè)樣本窗口,可以通過更細(xì)粒度對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì),這篇文章主要介紹了golang 實(shí)現(xiàn)時(shí)間滑動(dòng)窗口,需要的朋友可以參考下
    2022-10-10
  • Go數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)步驟

    Go數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)步驟

    本文主要介紹了Go數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Golang官方限流器庫(kù)實(shí)現(xiàn)限流示例詳解

    Golang官方限流器庫(kù)實(shí)現(xiàn)限流示例詳解

    這篇文章主要為大家介紹了Golang官方限流器庫(kù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語言題解LeetCode599兩個(gè)列表的最小索引總和

    Go語言題解LeetCode599兩個(gè)列表的最小索引總和

    這篇文章主要為大家介紹了Go語言題解LeetCode599兩個(gè)列表的最小索引總和示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go語言結(jié)構(gòu)體Go range的學(xué)習(xí)教程

    Go語言結(jié)構(gòu)體Go range的學(xué)習(xí)教程

    這篇文章主要為大家介紹了Go語言結(jié)構(gòu)體Go range的學(xué)習(xí)教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go高級(jí)特性探究之優(yōu)先級(jí)隊(duì)列詳解

    Go高級(jí)特性探究之優(yōu)先級(jí)隊(duì)列詳解

    Heap?是一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)常用于實(shí)現(xiàn)優(yōu)先隊(duì)列,這篇文章主要就是來和大家深入探討一下GO語言中的優(yōu)先級(jí)隊(duì)列,感興趣的可以了解一下
    2023-06-06

最新評(píng)論