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

Go中Vendo機制的使用

 更新時間:2024年10月18日 09:59:13   作者:18792721831  
自Go1.6起,Go語言正式啟用vendor機制,允許將項目依賴放入項目內的vendor目錄,類似私有GOPATH,本文就來介紹一下Vendo機制的使用,感興趣的可以了解一下

1. 介紹

自 Go 1.6 起,vendor 機制正式啟用,它允許把項目的依賴放到一個位于本項目的 vendor 目錄中,這個 vendor 目錄可以簡單理解成私有的 GOPATH 目錄。 項目編譯時,編譯器會優(yōu)先從 vendor 中尋找依賴包,如果 vendor 中找不到,則再到 GOPATH 中尋找。

2. vendor 目錄位置

一個項目可以有多個 vendor 目錄,分別位于不同的目錄級別,建議每個項目只在根目錄下放置一個 vendor 目錄。
假如有一個 github.com/test/testcase 項目,項目目錄結構如下:

GOPATH/src/github.com/test/testcase/testpackage/main/main.go

其中 main.go 中依賴如下幾個包:

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

在沒有使用 vendor 目錄時,若想編譯這個項目,則 GOPATH 目錄經過應該如下:

GOPATH/src/github.com/test/testcase/
GOPATH/src/github.com/pkg/sftp
GOPATH/src/golang.org/x/crypto/ssh

即所有依賴的包都位于 GOPATH/src 下。
為了把所使用到的 golang.org/x/crypto/ssh 和 github.com/pkg/sftp 版本固化下來,可以使用 vendor 機制。
在項目 github.com/test/testcase/ 根目錄下創(chuàng)建一個 vendor 目錄,并把 golang.org/x/crypto/ssh 和 github.com/pkg/sftp存放到此目錄中,讓其成為項目的一部分:

GOPATH/src/github.com/test/testcase/testpackage/main/main.go
GOPATH/src/github.com/test/testcase/vendor/github.com/pkg/sftp/
GOPATH/src/github.com/test/testcase/vendor/golang.org/x/crypto/ssh/

使用 vendor 的好處是在項目 github.com/test/testcase 發(fā)布時可以把其所依賴的軟件一并發(fā)布,編譯時不會受到 GOPATH 目錄的影響,即便 GOPATH 下也有一個
同名但不同版本的依賴包。

3. 搜索順序

編譯器會從源碼文件所在的目錄開始逐級向上搜索,在上面的例子中,在編譯 main.go 時,編譯器搜索依賴包的順序為:

  • 從 GOPATH/src/github.com/test/testcase/testpackage/main/ 下尋找 vendor 目錄,沒有找到,繼續(xù)從上層查找。
  • 從 GOPATH/src/github.com/test/testcase/testpackage/ 下尋找vendor 目錄,沒有找到,繼續(xù)從上層查找。
  • 從 GOPATH/src/github.com/test/testcase/ 下尋找 vendor 目錄,從 vendor 目錄中查找到依賴包,結束查找。

如果 GOPATH/src/github.com/test/testcase/ 下的 vendor 目錄中沒有依賴包,則返回 GOPATH 目錄繼續(xù)查找。這就是 GOPATH 機制了。
實際上 vendor 目錄可以存在于項目的任意目錄下。但是不推薦,如果 vendor 目錄過于分散,則可能同一個依賴包在項目的多個 vendor 中出現(xiàn)
多次,這樣依賴包會多次編譯進二進制文件,從而造成二進制文件的體積急劇增大,也很可能出現(xiàn)一個項目中使用同一個依賴包的多個版本的情況。

4. vendor 的不足

vendor 很好地解決了多項目間的隔離問題,但是也有一些不足之處:

  • 項目依賴關系不清晰,無法清楚地看出 vendor 目錄中依賴包的版本。
  • 依賴包升級時很不方便審核。

更嚴重的是二進制文件的體積急劇增大的問題,比如項目依賴開源包A和B,但是A中也有一個vendor目錄,其中也放了B,那么項目中將出現(xiàn)兩個開源包B。
如果兩個開源包B的版本不一致或者不兼容,那么后果非??膳?。

vendor 能夠解決大部分項目中的問題,但是也存在很多的不足之處。

到此這篇關于Go中Vendo機制的使用的文章就介紹到這了,更多相關Go Vendo內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go語言中Slice常見陷阱與避免方法詳解

    Go語言中Slice常見陷阱與避免方法詳解

    這篇文章主要為大家詳細介紹的是 Go 語言中的 Slice 的常見陷阱以及如何避免這些錯誤,文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下
    2023-02-02
  • 在go文件服務器加入http.StripPrefix的用途介紹

    在go文件服務器加入http.StripPrefix的用途介紹

    這篇文章主要介紹了在go文件服務器加入http.StripPrefix的用途介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang驗證器之validator是使用詳解

    Golang驗證器之validator是使用詳解

    Validator是一個?Golang?的第三方庫,用于對數(shù)據進行校驗,常用于?API?的開發(fā)中,對客戶端發(fā)出的請求數(shù)據進行嚴格校驗,防止惡意請求。本文通過示例詳細講解了Validator的使用,需要的可以參考一下
    2022-08-08
  • Golang小數(shù)操作指南之判斷小數(shù)點位數(shù)與四舍五入

    Golang小數(shù)操作指南之判斷小數(shù)點位數(shù)與四舍五入

    這篇文章主要給大家介紹了關于Golang小數(shù)操作指南之判斷小數(shù)點位數(shù)與四舍五入的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03
  • Go gin權限驗證實現(xiàn)過程詳解

    Go gin權限驗證實現(xiàn)過程詳解

    這篇文章主要為大家介紹了Go gin權限驗證實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Go語言到底有沒有引用傳參(對比 C++ )

    Go語言到底有沒有引用傳參(對比 C++ )

    這篇文章主要介紹了Go 到底有沒有引用傳參(對比 C++ ),需要的朋友可以參考下
    2017-09-09
  • golang中接口對象的轉型兩種方式

    golang中接口對象的轉型兩種方式

    這篇文章主要介紹了golang中接口對象的轉型方式,大家都知道接口對象的轉型有兩種方式,文中通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • 解決golang 關于全局變量的坑

    解決golang 關于全局變量的坑

    這篇文章主要介紹了解決golang 關于全局變量的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 深入理解go unsafe用法及注意事項

    深入理解go unsafe用法及注意事項

    go雖然是一種高級語言,但是也還是給開發(fā)者提供了指針的類型unsafe.Pointer,我們可以通過它來直接讀寫變量的內存,本文來了解一下?unsafe?里所能提供的關于指針的一些功能,以及使用unsafe.Pointer的一些注意事項
    2024-01-01
  • golang struct, map, json之間的相互轉換

    golang struct, map, json之間的相互轉換

    本文用于記錄我在 golang 學習階段遇到的類型轉換問題,針對的是 json 、map、struct 之間相互轉換的問題,感興趣的可以了解一下
    2021-06-06

最新評論