設定模組路徑 go mod模組管理

2021-10-16 06:46:31 字數 3385 閱讀 2458

gopath的基本理解

src:目錄包含源**。src下面的路徑確定匯入路徑或可執行檔名。

pkg:目錄包含已安裝的包物件。每個目標作業系統和體系結構對都有自己的子目錄pkg(pkg / goos_goarch)。

bin:目錄儲存已編譯的命令。

go mod

go 1.11 有了對模組的實驗性支援,大部分的子命令都知道如何處理乙個模組,比如 run build install get list mod 子命令,第三方工具可能會支援的晚一些。到 go 1.12 會刪除對 gopath 的支援,go get 命令也會變成只能獲取模組,不能像現在這樣直接獲取乙個裸包。可以用環境變數 go111module 開啟或關閉模組支援,它有三個可選值:off、on、auto,預設值是 auto。

go111module=off 無模組支援,go 會從 gopath 和 vendor 資料夾尋找包。

go111module=auto 在 $gopath/src 外面且根目錄有 go.mod 檔案時,開啟模組支援。

module機制由環境變數go111module控制,它有三個值:off、on、auto,預設值是auto。在auto模式下,在$gopath/src路徑下build時,預設使用vendor、gopath匯入第三方包,而在gopath之外編譯時,預設使用go.mod設定匯入專案。我們知道vendor機制只有在gopath路徑之下才起作用,到了gopath之外就沒用了。

定義模組

模組路徑指模組根目錄的匯入路徑,也是其他子目錄匯入路徑的字首。go.mod 檔案第一行定義了模組路徑,有了這一行才算作是乙個模組。

go.mod 檔案接下來的篇幅用來定義當前模組的依賴和依賴版本,也可以排除依賴和替換依賴。

module example.com/mrequire ( golang.org/x/text v0.3.0 gopkg.in/yaml.v2 v2.1.0 )replace ( golang.org/x/text => github.com/golang/text v0.3.0)
go mod init example.com/m 生成 go.mod 的第一行

執行 go mod tidy 命令會根據需要的依賴自動生成 require 語句。

go get

go get 可以在末尾加 @ 符號,用來指定版本。它要求倉庫必須用 v1.2.0 格式打 tag,像 v1.2 少個零都不行的,必須是語義化的、帶 v 字首的版本號。

go get github.com/gorilla/mux # 匹配最新的乙個 taggo get github.com/gorilla/mux@latest # 和上面一樣go get github.com/gorilla/[email protected] # 匹配 v1.6.2go get github.com/gorilla/mux@e3702bed2 # 匹配 v1.6.2go get github.com/gorilla/mux@c856192 # 匹配 c85619274f5dgo get github.com/gorilla/mux@master # 匹配 master 分支
latest 匹配最新的 tag。

v1.2.6 完整版本的寫法。

v1、v1.2 匹配帶這個字首的最新版本,如果最新版是 1.2.7,它們會匹配 1.2.7。

c856192 版本 hash 字首、分支名、無語義化的標籤,在 go.mod 裡都會會使用約定寫法 v0.0.0-20180517173623-c85619274f5d,也被稱作偽版本。

go get 可以模糊匹配版本號,但 go.mod 檔案只體現完整的版本號,即 v1.2.0、v0.0.0-20180517173623-c85619274f5d,只不過不需要手寫這麼長的版本號,用 go get 或上文的 go mod edit -require 模糊匹配即可,它會把匹配到的完整版本號寫進 go.mod 檔案。

使用流程

開啟go module

set go111module=on //windows export go111module=on //linux

如果不是在gopath中使用 export go111module=auto

go mod init [module]

此命令會在當前目錄中初始化和建立乙個新的go.mod檔案

go mod download

go mod graph

把模組之間的依賴圖顯示出

go mod tidy

go mod vendor

**把依賴拷貝到 vendor/ ** go build -mod=vendor

go mod verify

go build go tidy go verify 都會自動維護require包版本控制

go mod edit -require=golang.org/x/[email protected]

手動加入被牆的包(原始包),一定要記住版本號,實在不知道的話,就試試v0.0.0 版本可以通過執行go build 或者go tidy檢視報錯中版本號

用新的包路徑替換掉被牆的原始包,在這裡新的包版本可以使用latest和master,這個有點人性了!

go mod edit -require 和 -replace 可以通過修改go.mod檔案來做

關於科學的獲取package

一些專案使用的包無法go get則需要找到github上進行替換

第一步使用go mod tidy 提示***x包找不到 例如 golang.org/x/[email protected]

使用github上的包,首先需要獲取版本,通過go get -u github.com/golang/crypto 獲取包

在go.mod檔案中會出現如下類似的引用,前提是mod檔案中不要有crypto的記錄 require ( github.com/golang/crypto v0.0.0-20190219172222-a4c6cb3142f2 // indirect ) 我們記住github.com/golang/crypto v0.0.0-20190219172222-a4c6cb3142f2

在require中我們新增原來要引用的包 golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9

之後再replace中新增一行替換包的語句 golang.org/x/crypto => github.com/golang/crypto v0.0.0-20181001203147-e3636079e1a4

再次go mod tidy 就發現被牆的包替換為github的包了

簡單粗暴的方案

export goproxy=

export goproxy=

Go Mod(三)如何使用模組

如果安裝並支援模組 如果需要使用模組,有以下兩種方式 個人推薦方式一 當你完成安裝後,你有一下兩種方式啟用模組支援 如何宣告乙個模組 為乙個已經存在的專案建立乙個go.mod檔案 進入到專案根目錄 cd 如果是gopath路徑外,你不需要用go111moudle顯式啟用。如果你想要在gopath路徑...

模組延時路徑

延時說明定義的是門或模組的固有延時。輸入上的任何變化要經過說明的延時才能在輸出端反映出來。如果沒有延時說明,則基本單元的延時為0。分布關斷延時只對三態基本單元有效。上公升延時是輸出轉換為1時的延時 下降延時是輸出轉換為0時的延時 關斷延時輸出轉換為三態時的延時 到x的轉換延時是最小延時,而從x到其它...

模組的使用,模組的搜尋路徑

模組的使用 1 什麼是模組 模組是一系列功能的集合體 常見的模組形式 自定義模組 第三方模組 內建模組 1 乙個module.py檔案就是乙個模組,檔名是module.py,而模組名是module 2 乙個包含有 init py檔案的資料夾也是模組 3 已被編譯為共享庫或dll的c或c 擴充套件 4...