Go module 擴(kuò)展管理

go module是Go1.11版本之后官方推出的版本管理工具,并且從Go1.13版本開(kāi)始,go module將是Go語(yǔ)言默認(rèn)的依賴管理工具超棺。

GO111MODULE

要啟用go module支持首先要設(shè)置環(huán)境變量GO111MODULE,通過(guò)它可以開(kāi)啟或關(guān)閉模塊支持捌袜,它有三個(gè)可選值:off说搅、onauto虏等,默認(rèn)值是auto弄唧。

  1. GO111MODULE=off禁用模塊支持适肠,編譯時(shí)會(huì)從GOPATHvendor文件夾中查找包。
  2. GO111MODULE=on啟用模塊支持候引,編譯時(shí)會(huì)忽略GOPATHvendor文件夾侯养,只根據(jù) go.mod下載依賴。
  3. GO111MODULE=auto澄干,當(dāng)項(xiàng)目在$GOPATH/src外且項(xiàng)目根目錄有go.mod文件時(shí)逛揩,開(kāi)啟模塊支持。

簡(jiǎn)單來(lái)說(shuō)麸俘,設(shè)置GO111MODULE=on之后就可以使用go module了辩稽,以后就沒(méi)有必要在GOPATH中創(chuàng)建項(xiàng)目了,并且還能夠很好的管理項(xiàng)目依賴的第三方包信息从媚。

使用 go module 管理依賴后會(huì)在項(xiàng)目根目錄下生成兩個(gè)文件go.modgo.sum逞泄。

GOPROXY

Go1.11之后設(shè)置GOPROXY命令為:

export GOPROXY=https://goproxy.cn

Go1.13之后GOPROXY默認(rèn)值為https://proxy.golang.org,在國(guó)內(nèi)是無(wú)法訪問(wèn)的拜效,所以十分建議大家設(shè)置GOPROXY喷众,這里我推薦使用goproxy.cn

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

go mod命令

常用的go mod命令如下:

go mod download    下載依賴的module到本地cache(默認(rèn)為$GOPATH/pkg/mod目錄)
go mod edit        編輯go.mod文件
go mod graph       打印模塊依賴圖
go mod init        初始化當(dāng)前文件夾, 創(chuàng)建go.mod文件
go mod tidy        增加缺少的module紧憾,刪除無(wú)用的module
go mod vendor      將依賴復(fù)制到vendor下
go mod verify      校驗(yàn)依賴
go mod why         解釋為什么需要依賴

go.mod

go.mod文件記錄了項(xiàng)目所有的依賴信息到千,其結(jié)構(gòu)大致如下:

module github.com/Q1mi/studygo/blogger

go 1.12

require (
    github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586
    github.com/gin-gonic/gin v1.4.0
    github.com/go-sql-driver/mysql v1.4.1
    github.com/jmoiron/sqlx v1.2.0
    github.com/satori/go.uuid v1.2.0
    google.golang.org/appengine v1.6.1 // indirect
)

其中,

  • module用來(lái)定義包名
  • require用來(lái)定義依賴包及版本
  • indirect表示間接引用

依賴的版本

go mod支持語(yǔ)義化版本號(hào)赴穗,比如go get foo@v1.2.3憔四,也可以跟git的分支或tag,比如go get foo@master望抽,當(dāng)然也可以跟git提交哈希加矛,比如go get foo@e3702bed2。關(guān)于依賴的版本支持以下幾種格式:

gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
gopkg.in/vmihailenco/msgpack.v2 v2.9.1
gopkg.in/yaml.v2 <=v2.2.1
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
latest

replace

在國(guó)內(nèi)訪問(wèn)golang.org/x的各個(gè)包都需要翻墻煤篙,你可以在go.mod中使用replace替換成github上對(duì)應(yīng)的庫(kù)斟览。

replace (
    golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
    golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
    golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
)

go get

在項(xiàng)目中執(zhí)行go get命令可以下載依賴包,并且還可以指定下載的版本辑奈。

  1. 運(yùn)行go get -u將會(huì)升級(jí)到最新的次要版本或者修訂版本(x.y.z, z是修訂版本號(hào)苛茂, y是次要版本號(hào))
  2. 運(yùn)行go get -u=patch將會(huì)升級(jí)到最新的修訂版本
  3. 運(yùn)行go get package@version將會(huì)升級(jí)到指定的版本號(hào)version

如果下載所有依賴可以使用go mod download命令。

整理依賴

我們?cè)诖a中刪除依賴代碼后鸠窗,相關(guān)的依賴庫(kù)并不會(huì)在go.mod文件中自動(dòng)移除妓羊。這種情況下我們可以使用go mod tidy命令更新go.mod中的依賴關(guān)系。

go mod edit

格式化

因?yàn)槲覀兛梢允謩?dòng)修改go.mod文件稍计,所以有些時(shí)候需要格式化該文件躁绸。Go提供了一下命令:

go mod edit -fmt

添加依賴項(xiàng)

go mod edit -require=golang.org/x/text

移除依賴項(xiàng)

如果只是想修改go.mod文件中的內(nèi)容,那么可以運(yùn)行go mod edit -droprequire=package path,比如要在go.mod中移除golang.org/x/text包净刮,可以使用如下命令:

go mod edit -droprequire=golang.org/x/text

關(guān)于go mod edit的更多用法可以通過(guò)go help mod edit查看剥哑。

在項(xiàng)目中使用go module

既有項(xiàng)目

如果需要對(duì)一個(gè)已經(jīng)存在的項(xiàng)目啟用go module,可以按照以下步驟操作:

  1. 在項(xiàng)目目錄下執(zhí)行go mod init淹父,生成一個(gè)go.mod文件株婴。
  2. 執(zhí)行go get,查找并記錄當(dāng)前項(xiàng)目的依賴暑认,同時(shí)生成一個(gè)go.sum記錄每個(gè)依賴庫(kù)的版本和哈希值困介。

新項(xiàng)目

對(duì)于一個(gè)新創(chuàng)建的項(xiàng)目,我們可以在項(xiàng)目文件夾下按照以下步驟操作:

  1. 執(zhí)行go mod init 項(xiàng)目名命令蘸际,在當(dāng)前項(xiàng)目文件夾下創(chuàng)建一個(gè)go.mod文件座哩。
  2. 手動(dòng)編輯go.mod中的require依賴項(xiàng)或執(zhí)行go get自動(dòng)發(fā)現(xiàn)、維護(hù)依賴粮彤。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末八回,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子驾诈,更是在濱河造成了極大的恐慌,老刑警劉巖溶浴,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乍迄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡士败,警方通過(guò)查閱死者的電腦和手機(jī)闯两,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谅将,“玉大人漾狼,你說(shuō)我怎么就攤上這事〖⒈郏” “怎么了逊躁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)隅熙。 經(jīng)常有香客問(wèn)我稽煤,道長(zhǎng),這世上最難降的妖魔是什么囚戚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任酵熙,我火速辦了婚禮,結(jié)果婚禮上驰坊,老公的妹妹穿的比我還像新娘匾二。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布察藐。 她就那樣靜靜地躺著皮璧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪转培。 梳的紋絲不亂的頭發(fā)上恶导,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音浸须,去河邊找鬼惨寿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛删窒,可吹牛的內(nèi)容都是我干的裂垦。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肌索,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蕉拢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起诚亚,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晕换,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后站宗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體闸准,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年梢灭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夷家。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敏释,死狀恐怖库快,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钥顽,我是刑警寧澤义屏,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站耳鸯,受9級(jí)特大地震影響湿蛔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜县爬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一阳啥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧财喳,春花似錦察迟、人聲如沸斩狱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)所踊。三九已至,卻和暖如春概荷,著一層夾襖步出監(jiān)牢的瞬間秕岛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工误证, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留继薛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓愈捅,卻偏偏與公主長(zhǎng)得像遏考,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蓝谨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Go語(yǔ)言的依賴管理隨著版本的更迭正逐漸完善起來(lái)灌具。 windows開(kāi)啟go module:set GO111MODU...
    雪上霜閱讀 369評(píng)論 0 0
  • https://www.cnblogs.com/chnmig/p/11806609.html[https://ww...
    千沙qiansha閱讀 205評(píng)論 0 0
  • go 1.11 有了對(duì)模塊的實(shí)驗(yàn)性支持,大部分的子命令都知道如何處理一個(gè)模塊譬巫,比如 run build insta...
    72d89184c236閱讀 267評(píng)論 0 0
  • Go語(yǔ)言的依賴管理隨著版本的更迭正逐漸完善起來(lái)咖楣。 依賴管理 為什么需要依賴管理 最早的時(shí)候,Go所依賴的所有的第三...
    吳佳浩閱讀 671評(píng)論 0 3
  • go mod管理項(xiàng)目 準(zhǔn)備環(huán)境 全局開(kāi)啟module管理# 自動(dòng) (推薦)# go命令行將會(huì)根據(jù)當(dāng)前目錄來(lái)決定是否...
    五歲小孩閱讀 1,355評(píng)論 0 3