婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

vendor

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

按vendor概念調整的目錄結構如下:

$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的引用如下所示,看起來和平時的引用沒什么區別。

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為根的子樹中。則導入語句import "golang.org/x/crypto/ssh",編譯好像是import "github.com/constabulary/example-gsftp/vendor/golang.org/x/crypto/ssh",只不過這種較長的形式從未寫過。

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

vendor的層級搜索

規則是:

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

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

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

modules

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

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

查找順序

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

優先使用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 文件一旦創建后,它的內容將會被 go toolchain(工具鏈)完全掌控,比如:執行 go get、go build、go mod 等指令時,會自動修改和維護 go.mod 文件。

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

go.mod 和 go.sum 都應該應用于版本控制。 并且 go.sum 不需要手工維護,所以可以不用太關注。

使用 go mod

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

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

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

GO111MODULE=auto:go 指令根據當前目錄來決定是否啟用 Modules 功能。

當項目處于 GOPATH/src 內,則會使用 GOPATH/src 的依賴包。

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

使用 go.mod 的流程:

在 $GOPATH/src 目錄之外創建 Golang 項目。

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

$ go mod init projectNmae>

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

導入外部包:

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 是一個關鍵字,此外還有 module、replace 和 exclude:

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

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

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

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

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

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

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

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

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

go mod 的子指令

初始化一個 Module:

go mod init project_name>

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

# 在項目目錄下執行

go mod download

注:目前所有模塊版本數據均緩存在 $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

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

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

標簽:黔西 松原 武漢 鷹潭 保定 泰安 宜春 河池

巨人網絡通訊聲明:本文標題《Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序》,本文關鍵詞  外部,依賴,包,從,vendor,GOPATH,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序》相關的同類信息!
  • 本頁收集關于Go外部依賴包從vendor,$GOPATH和$GOPATH/pkg/mod查找順序的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产呦精品一区二区三区网站| 亚洲另类春色校园小说| 日本福利一区二区| 91老师国产黑色丝袜在线| 菠萝蜜视频在线观看一区| 国产超碰在线一区| 成人自拍视频在线| 波波电影院一区二区三区| av一区二区久久| 色婷婷久久一区二区三区麻豆| 色视频一区二区| 欧美日韩久久久| 欧美一级生活片| 26uuu国产电影一区二区| 久久婷婷久久一区二区三区| 国产无一区二区| 国产精品久久久久久妇女6080| 亚洲天堂2014| 亚洲图片欧美综合| 久久99精品一区二区三区| 国产一区视频网站| 94色蜜桃网一区二区三区| 欧美自拍偷拍一区| 日韩精品一区二| 国产精品动漫网站| 亚洲一级二级在线| 美国十次综合导航| 国产91精品免费| 在线观看亚洲成人| 欧美电视剧在线观看完整版| 久久先锋资源网| 亚洲精品综合在线| 美女视频黄a大片欧美| 成人福利视频网站| 欧美精品免费视频| 中文字幕精品综合| 亚洲激情图片qvod| 日本亚洲欧美天堂免费| 成人自拍视频在线| 欧美精品少妇一区二区三区 | 欧美大片日本大片免费观看| 久久九九久久九九| 亚洲福利一二三区| 国产一区二区三区最好精华液| 99久久99久久精品免费看蜜桃| 欧美日本一区二区| 欧美国产日韩a欧美在线观看| 亚洲国产婷婷综合在线精品| 国产精品综合久久| 欧美伦理影视网| 国产精品视频免费| 日产欧产美韩系列久久99| 成人av一区二区三区| 欧美久久久久久久久中文字幕| 中文字幕精品一区二区精品绿巨人| 亚洲777理论| 成人a免费在线看| 日韩欧美在线综合网| 亚洲精品中文字幕在线观看| 国产专区欧美精品| 欧美男女性生活在线直播观看| 中文字幕精品三区| 免费观看成人av| 色一区在线观看| 国产夜色精品一区二区av| 午夜免费久久看| 91网站在线播放| 国产视频一区二区在线| 青青草精品视频| 在线视频欧美精品| 国产精品久久久久国产精品日日| 另类专区欧美蜜桃臀第一页| 色综合久久88色综合天天6| 久久婷婷国产综合国色天香| 日韩av在线发布| 欧美亚洲禁片免费| 综合亚洲深深色噜噜狠狠网站| 理论片日本一区| 欧美日韩亚洲高清一区二区| 亚洲天天做日日做天天谢日日欢| 国产91精品一区二区麻豆亚洲| 日韩欧美视频在线| 三级影片在线观看欧美日韩一区二区 | 欧美一区二区三区播放老司机| 国产欧美日本一区视频| 色一情一伦一子一伦一区| 欧美成人精品福利| 加勒比av一区二区| 香蕉久久夜色精品国产使用方法| 精品三级在线观看| 91丨porny丨国产入口| 免费黄网站欧美| 亚洲欧美日韩国产综合| 精品国产成人系列| 欧美视频日韩视频| 91在线看国产| 国产美女主播视频一区| 亚洲精品国产一区二区三区四区在线 | 日产欧产美韩系列久久99| 日本一区二区免费在线观看视频| 欧美久久久一区| 欧美午夜在线一二页| 99久精品国产| 成人av小说网| 国产91高潮流白浆在线麻豆| 免费成人av资源网| 男男视频亚洲欧美| 视频一区二区三区入口| 一区二区三区四区五区视频在线观看 | 天堂在线亚洲视频| 美女爽到高潮91| 欧美性一二三区| 亚洲色图欧美激情| 国产一本一道久久香蕉| 欧美日韩一区中文字幕| 国产三区在线成人av| 日日摸夜夜添夜夜添精品视频 | 日韩一级在线观看| 国产欧美一区二区精品婷婷| 午夜在线成人av| 国产.欧美.日韩| 91黄色免费观看| 欧美一区二区三区播放老司机| 久久精品欧美一区二区三区麻豆| 久久久99精品免费观看| 一区二区三区在线免费观看 | 欧美一级高清片| 日韩视频免费观看高清在线视频| 国产欧美日韩在线视频| 亚洲综合精品自拍| 97精品视频在线观看自产线路二| 99久久精品免费观看| 日韩欧美一区二区久久婷婷| 在线观看不卡视频| 国产精品一区二区三区99| 国产资源在线一区| 成人精品免费网站| 99久久综合精品| 日av在线不卡| 亚洲免费观看高清完整版在线| 国产精品网曝门| 亚洲777理论| 成人午夜电影网站| 国产精品美日韩| 日本va欧美va瓶| 91视频国产资源| 久久精品日产第一区二区三区高清版 | 风间由美一区二区三区在线观看| 日本道在线观看一区二区| 久久青草欧美一区二区三区| 一区二区三区四区在线免费观看| 国内精品伊人久久久久av影院| 欧美性色黄大片| 国产精品日韩成人| 青青草精品视频| 在线播放亚洲一区| 一区二区三区中文字幕电影| 国产精品2024| 日韩女优毛片在线| 日本视频免费一区| 欧美精选一区二区| 午夜亚洲福利老司机| 日本道在线观看一区二区| 国产精品欧美一区喷水| 激情综合色播五月| 日韩欧美三级在线| 国产剧情在线观看一区二区| 精品国产精品网麻豆系列 | 日本欧美一区二区三区| 欧美日韩一区二区三区视频| 香港成人在线视频| 日韩av电影免费观看高清完整版 | 欧美无砖专区一中文字| 欧美日韩中文字幕一区二区| 欧美v日韩v国产v| 欧美aaaaa成人免费观看视频| 欧美日韩综合不卡| 婷婷成人激情在线网| 成人激情综合网站| 国产欧美一二三区| 日本怡春院一区二区| 91一区二区在线观看| 日本一区二区三区久久久久久久久不 | 欧美私模裸体表演在线观看| 国产精品天干天干在线综合| 成人av资源在线| 最新热久久免费视频| 欧美亚洲综合一区| 黄色资源网久久资源365| 国产欧美精品一区| 色悠悠亚洲一区二区| 蜜臀久久久久久久| 久久精品欧美日韩| 欧美伊人久久大香线蕉综合69 | 看国产成人h片视频| 久久精品人人做人人综合| 色综合视频一区二区三区高清| 日韩av中文字幕一区二区三区| 国产精品人成在线观看免费| 欧美日韩综合一区|