校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序

Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序

熱門標(biāo)簽:杭州人工智能電銷機器人費用 赤峰電銷 400開頭電話怎樣申請 谷歌美發(fā)店地圖標(biāo)注 地圖區(qū)域圖標(biāo)注后導(dǎo)出 利用地圖標(biāo)注位置 江蘇呼叫中心外呼系統(tǒng)有效果嗎 貴州電話智能外呼系統(tǒng) 官渡電銷外呼管理系統(tǒng)怎么收費

vendor

vendor概念最早是由Keith提出,用來存放依賴包。在版本1.5出現(xiàn)。例如gb項目提供了一個名為gsftp的示例項目,它有一個gsftp程序,在標(biāo)準(zhǔn)庫之外有三個依賴項。golang.org/x/crypto/ssh, golang.org/x/crypto/ssh/agent和github.com/pkg/sftp。

按vendor概念調(diào)整的目錄結(jié)構(gòu)如下:

$GOPATH
|	src/
|	|	github.com/constabulary/example-gsftp/
|	|	|	cmd/
|	|	|	|	gsftp/
|	|	|	|	|	main.go
|	|	|	vendor/
|	|	|	|	github.com/pkg/sftp/
|	|	|	|	golang.org/x/crypto/ssh/
|	|	|	|	|	agent/

文件github.com/constabulary/example-gsftp/cmd/gsftp/main.go的引用如下所示,看起來和平時的引用沒什么區(qū)別。

import (
 ...
 "golang.org/x/crypto/ssh"
 "golang.org/x/crypto/ssh/agent"
 "github.com/pkg/sftp"
)

因為github.com/constabulary/example-gsftp/vendor/golang.org/x/crypto/ssh存在,且正在編譯的文件位于以github.com/constabulary/example-gsftp為根的子樹中。則導(dǎo)入語句import "golang.org/x/crypto/ssh",編譯好像是import "github.com/constabulary/example-gsftp/vendor/golang.org/x/crypto/ssh",只不過這種較長的形式從未寫過。

因此github.com/constabulary/example-gsftp中的源代碼取決于vendor中有關(guān)golang.org/x/crypto/ssh的拷貝副本, 而不是$GOPATH中的其他地方。

vendor的層級搜索

規(guī)則是:

從引用文件所在的vendor路徑下面搜索,

如果沒有找到,那么從上層目錄的vendor路徑下面搜索,

直到src的vendor路徑下面搜索。

modules

Go 1.11版本支持臨時環(huán)境變量GO111MODULE,通過該環(huán)境變量來控制依賴包的管理方式。當(dāng)GO111MODULE的值為on時,那么就會使用modules功能,這種模式下,$GOPATH不再作為build時導(dǎo)入的角色,依賴包會存放在$GOPATH/pkg/mod目錄下。工程中的依賴包也會從此目錄下查找。

有關(guān)該功能的介紹,可以看Go1.1.1新功能module的介紹及使用。

查找順序

GO111MODULE=off時,如果一個包在vendor和$GOPATH下都存在,那么使用順序為:

優(yōu)先使用vendor目錄下面的包,

如果vendor下面沒有搜索到,再搜索$GOPATH/src下面的包,

如果$GOPATH下面沒有搜索到,那么搜索$GOROOT/src下面的包,

要么完整使用vendor下面的包,要么完整使用$GOPATH下面的包,不會混合使用。

補充:Go 語言編程 — go mod 依賴包管理

使用 go mod

go mod 的子指令

go mod 依賴包管理

Golang 將 Modules(模塊)定義為 “源代碼交付和版本控制的單元”。

go mod 是 Golang 1.11 版本引入的依賴包管理工具,替換舊的基于 GOPATH 的依賴包管理方式。GOPATH 不再需要包含 src 子目錄,使用 go.mod 方式管理的依賴包都被下載到了 $GOPATH/pkg/mod 目錄。

有了 go mod 之后,每個項目(源代碼目錄)就是一個 Module,只要其中包含了 go.mod 文件。go mod 指令和 go.mod 文件用于記錄和解析模塊之間的依賴性。

go.mod 文件一旦創(chuàng)建后,它的內(nèi)容將會被 go toolchain(工具鏈)完全掌控,比如:執(zhí)行 go get、go build、go mod 等指令時,會自動修改和維護 go.mod 文件。

除了 go.mod 之外,go 指令還維護了一個 go.sum 文件,其中包含特定模塊版本內(nèi)容的加密哈希。go 指令使用 go.sum 文件來確保這些模塊的哈希值,以確保項目所依賴的模塊不會出現(xiàn)意外更改。

go.mod 和 go.sum 都應(yīng)該應(yīng)用于版本控制。 并且 go.sum 不需要手工維護,所以可以不用太關(guān)注。

使用 go mod

使用 Go Modules 需要配置 GO111MODULE 環(huán)境變量,GO111MODULE 有三個值:off、on 和 auto(默認(rèn)值):

GO111MODULE=off:關(guān)閉 Go Modules,沿用舊版本的 GOPATH 方式,項目的依賴包依舊在 vendor 目錄或者 $GOPATH/src 目錄下進行查找。

GO111MODULE=on:開啟 Go Modules,項目的依賴包記錄在 go.mod 文件中。

GO111MODULE=auto:go 指令根據(jù)當(dāng)前目錄來決定是否啟用 Modules 功能。

當(dāng)項目處于 GOPATH/src 內(nèi),則會使用 GOPATH/src 的依賴包。

當(dāng)項目處于 GOPATH/src 外,則使用 go.mod 里 require 聲明的依賴包。

使用 go.mod 的流程:

在 $GOPATH/src 目錄之外創(chuàng)建 Golang 項目。

初始化項目的 go.mod 文件。

$ go mod init projectNmae>

注意,項目下屬的子目錄是不需要再次 init 的,整個項目的依賴都會組織在根目錄的 go.mod 文件里。

導(dǎo)入外部包:

package main

import (
 "fmt"
 "github.com/gohouse/gorose"
)

func main() {
 fmt.Println("hello world!")
}

運行程序時,會自動下載依賴包并更新 go.mod 文件:

$ go run hello.go
go: finding module for package github.com/gohouse/gorose
go: downloading github.com/gohouse/gorose v1.0.5
go: found github.com/gohouse/gorose in github.com/gohouse/gorose v1.0.5
go: finding module for package github.com/gohouse/converter
go: downloading github.com/BurntSushi/toml v0.3.0
go: downloading github.com/gohouse/converter v0.0.3
go: found github.com/gohouse/converter in github.com/gohouse/converter v0.0.3
go: downloading github.com/go-sql-driver/mysql v1.4.0
# command-line-arguments
./hello.go:5:5: imported and not used: "github.com/gohouse/gorose"

檢查 go.mod 文件中自動更新的依賴清單:

module hello

go 1.14

require (
 github.com/gohouse/converter v0.0.3 // indirect
 github.com/gohouse/gorose v1.0.5 // indirect
)

其中 require 是一個關(guān)鍵字,此外還有 module、replace 和 exclude:

module 語句:指定模塊的名字(路徑)。

require 語句:指定的依賴模塊。

replace 語句:可以替換依賴項模塊。

exclude 語句:可以忽略依賴項模塊。

另外,上述的 v0.0.3 就是依賴包 converter 的版本。如果沒有在 go.mod 指定版本,go 指令就會自動下載代碼中的依賴的最新版本。否則,go 指令會根據(jù) require 語句的路徑和版本進行下載。指定版本時也可以用 latest,表示下載最新的版本。

replace 語句常用于依賴包實際路徑變更的場景中,例如:

replace golang.org/x/text => github.com/golang/text latest

如此的,在這種情況下依賴包的維護會變得更簡單。

還需要注意 go.mod 中的 module hello 這一條語句,因為當(dāng)前項目已經(jīng)不在 $GOPATH/src 內(nèi)了,所以 module hello 標(biāo)注了項目 “根” 的路徑,以此來作為項目中其他包的根路徑。

go mod 的子指令

初始化一個 Module:

go mod init project_name>

下載項目依賴的 modules 到本地 Cache:

# 在項目目錄下執(zhí)行

go mod download

注:目前所有模塊版本數(shù)據(jù)均緩存在 $GOPATH/pkg/mod 和 $GOPATH/pkg/sum 下。

編輯 go.mod 文件,選項有 -json、-require 和 -exclude:

go mod edit
# e.g.
go mod edit -replace=golang.org/x/crypto@v0.0.0=github.com/golang/crypto@latest

以文本模式打印模塊需求圖:

go mod graph

刪除錯誤或者不使用的 Modules:

go mod tidy

生成 Vendor 目錄:

go mod vendor

驗證依賴是否正確:

go mod verify

查找依賴:

go mod why

清理 Modules 緩存:

go clean -modcache

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • go自動下載所有的依賴包go module使用詳解
  • golang使用 gomodule 在公共測試環(huán)境管理go的依賴的實例詳解
  • go mod 安裝依賴 unkown revision問題的解決方案

標(biāo)簽:黔西 松原 武漢 鷹潭 保定 泰安 宜春 河池

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序》,本文關(guān)鍵詞  外部,依賴,包,從,vendor,GOPATH,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序》相關(guān)的同類信息!
  • 本頁收集關(guān)于Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美专区日韩专区| 成人欧美一区二区三区黑人麻豆 | 亚洲色图19p| 三级不卡在线观看| 色综合av在线| 色天使色偷偷av一区二区| 精品国产一区二区三区四区四 | 国产成人日日夜夜| 欧美日本国产视频| 亚洲免费观看高清完整版在线观看| 日韩av中文在线观看| 91视频.com| 国产精品免费视频网站| 麻豆一区二区三| 欧美在线观看视频在线| 国产精品女同一区二区三区| 免费高清在线一区| 欧美人成免费网站| 一区二区在线观看免费视频播放 | 午夜欧美2019年伦理| 成人黄色片在线观看| 日韩欧美中文字幕一区| 调教+趴+乳夹+国产+精品| 在线观看日韩国产| 亚洲日本va在线观看| 成人免费高清在线观看| 久久亚洲精品国产精品紫薇| 久色婷婷小香蕉久久| 欧美日本在线看| 亚洲va欧美va人人爽| 色琪琪一区二区三区亚洲区| 日韩美女精品在线| 99riav一区二区三区| 国产精品久久午夜| 成人毛片视频在线观看| 国产精品久久综合| 91在线视频18| 亚洲激情中文1区| 在线免费观看成人短视频| 一区二区三区中文在线观看| 在线一区二区观看| 亚洲午夜久久久久久久久久久| 欧美亚洲国产一区二区三区| 亚洲一区在线观看视频| 欧美精品在线观看播放| 日韩成人av影视| 精品久久久三级丝袜| 国产麻豆午夜三级精品| 欧美国产欧美综合| 99久久精品情趣| 亚洲乱码国产乱码精品精可以看| 色婷婷av一区二区三区大白胸| 亚洲欧美偷拍另类a∨色屁股| 色欧美日韩亚洲| 天堂久久久久va久久久久| 欧美一级高清片| 国产一区二区三区黄视频 | 激情欧美一区二区三区在线观看| 日韩午夜精品视频| 国产美女精品人人做人人爽| 中文字幕一区三区| 欧美日韩国产综合一区二区三区| 久久精工是国产品牌吗| 国产欧美日韩亚州综合| 99精品偷自拍| 免费国产亚洲视频| 欧美一二区视频| 粉嫩绯色av一区二区在线观看| 中文字幕在线观看不卡| 欧美午夜精品久久久久久孕妇| 五月天欧美精品| 国产午夜久久久久| 欧美色成人综合| 国产二区国产一区在线观看| 亚洲欧美另类图片小说| 欧美一二三区精品| 色综合久久综合网97色综合 | 色女孩综合影院| 久久66热re国产| 亚洲自拍偷拍av| 中文字幕成人av| 日韩精品一区二区在线| 日本韩国欧美在线| 国产精品资源在线| 午夜欧美视频在线观看| 中文字幕在线一区| 日韩欧美在线影院| 日本道色综合久久| av一区二区三区| 国产在线视频精品一区| 午夜国产精品一区| 亚洲视频资源在线| 久久精品免费在线观看| 91精品欧美综合在线观看最新 | 欧美性色黄大片手机版| 国产成人欧美日韩在线电影| 日韩电影在线一区二区| 中文字幕亚洲精品在线观看| 日韩免费一区二区| 欧美日韩激情一区| 日本二三区不卡| 成人av资源下载| 国产成人精品一区二| 久久精品免费观看| 日本午夜精品视频在线观看| 亚洲综合网站在线观看| 欧美国产一区二区| 国产日产亚洲精品系列| 精品国产免费视频| 日韩精品一区二区三区视频播放 | 日韩一级在线观看| 欧美高清精品3d| 欧美日韩电影在线| 欧美精品在线观看一区二区| 欧美日韩精品三区| 777色狠狠一区二区三区| 欧美在线观看一二区| 在线观看中文字幕不卡| 一本一道综合狠狠老| 91视频精品在这里| 一本到不卡精品视频在线观看| 91麻豆精东视频| 在线观看一区二区精品视频| 欧洲av一区二区嗯嗯嗯啊| 91成人在线免费观看| 欧美日韩综合色| 91精品国模一区二区三区| 911精品国产一区二区在线| 日韩一区二区三区在线| 日韩欧美一卡二卡| 国产无人区一区二区三区| 国产网站一区二区| 国产精品国产三级国产aⅴ入口| 中文字幕中文字幕中文字幕亚洲无线| 中文字幕乱码一区二区免费| 国产精品久久久久久亚洲伦| 亚洲欧美激情视频在线观看一区二区三区 | 国产不卡在线播放| 99久久久久久| 欧美色综合网站| 欧美一区二区在线不卡| 久久久久一区二区三区四区| 中文字幕中文乱码欧美一区二区| 亚洲色图制服诱惑| 日本亚洲三级在线| 国产91精品入口| 色综合久久中文综合久久牛| 欧美蜜桃一区二区三区| 精品国产网站在线观看| 国产精品毛片久久久久久久| 亚洲在线观看免费| 激情综合色丁香一区二区| 高清成人在线观看| 欧美视频一区二区在线观看| 精品剧情v国产在线观看在线| 中文字幕av资源一区| 亚洲成在人线在线播放| 国产成人综合在线播放| 欧美婷婷六月丁香综合色| 久久蜜桃av一区二区天堂| 亚洲免费在线看| 久久99国产精品久久99果冻传媒| 成人激情视频网站| 91精品国产综合久久精品| 国产精品国产三级国产aⅴ原创| 日本一区中文字幕| aaa国产一区| 精品电影一区二区| 亚洲国产精品影院| 成人午夜大片免费观看| 7777女厕盗摄久久久| 国产精品欧美精品| 蜜臀av一区二区在线免费观看| 91片在线免费观看| 久久久99久久| 麻豆精品一区二区| 欧美男生操女生| 伊人一区二区三区| 成人永久免费视频| 欧美videos大乳护士334| 亚洲一区中文在线| 91蝌蚪porny| 国产精品天干天干在线综合| 蜜臀av一区二区三区| 欧美日韩亚洲另类| 亚洲精品免费视频| 91色婷婷久久久久合中文| 欧美激情一区二区三区不卡| 免费在线看成人av| 欧美日本一区二区三区| 一区二区高清免费观看影视大全| 风流少妇一区二区| 久久精品亚洲麻豆av一区二区| 蜜臀精品一区二区三区在线观看| 欧美日韩久久一区二区| 综合av第一页| 一本到不卡免费一区二区| 亚洲欧美日本韩国| 色八戒一区二区三区| 亚洲日本在线看|