Go vendor

博主在編寫Go代碼時,遇到了這樣一個問題:想要修改某個外部包,添加幾個函數,而其余功能繼續使用,經過調研,發現可以將Go的外部包源碼復制到項目本地,對包的代碼進行修改,從而達到目的。以下是對Go vendor的介紹。

功能

  1. 復制依賴到本地go mod vendor 會根據項目的 go.mod 文件,將所有依賴模塊的源代碼復制到項目的 vendor 目錄中。這包括直接依賴和間接依賴,但不包括測試文件(如 *_test.go)以及依賴模塊中的 vendor 文件夾。
  2. 離線構建支持通過將依賴項本地化,go mod vendor 允許項目在沒有網絡連接的情況下進行構建和測試,避免因依賴源不可用或網絡問題導致的構建失敗。
  3. **構建時優先使用 vendor**在 Go 1.14 及更高版本中,如果項目目錄下存在 vendor 文件夾,Go 工具鏈會默認使用 vendor 中的依賴,而不是從遠程倉庫下載。

使用場景

  1. 網絡不穩定或依賴源不可用在某些情況下,遠程依賴可能會因為網絡問題或模塊被刪除而無法訪問。使用 go mod vendor 可以確保項目的依賴完整性。
  2. 構建環境隔離在構建 Docker 鏡像或部署到生產環境時,使用 vendor 目錄可以避免在構建過程中訪問外部網絡,從而提高安全性和效率。
  3. 版本控制和依賴審查vendor 目錄提交到版本控制系統(如 Git)中,可以確保團隊成員或 CI/CD 環境使用完全一致的依賴版本,同時便于對依賴代碼進行審查。

使用方法

  1. 初始化模塊:

    go mod init [module-name]
    

    生成 go.mod 文件。

  2. 整理依賴:

    go mod tidy
    

    添加缺失的依賴或移除未使用的依賴。

  3. 下載依賴:

    go mod download
    

    將依賴下載到本地緩存。

  4. 生成 vendor 目錄:

    go mod vendor
    

    將依賴復制到項目的 vendor 目錄中。

  5. 構建時使用 vendor 目錄:
    如果需要顯式指定使用 vendor,可以使用以下命令:

    go build -mod=vendor
    

優點

  • 離線構建:確保項目在沒有網絡的情況下也能正常構建。
  • 依賴穩定性:避免遠程依賴被刪除或版本變更導致的構建失敗。
  • 安全性:減少對外部網絡的依賴,降低安全風險。

缺點

  • 增加項目體積vendor 目錄會顯著增加項目的存儲空間,尤其是依賴較多時。
  • 版本管理復雜性:需要手動更新 vendor 目錄,可能導致版本管理不夠靈活。
  • 社區趨勢:隨著 Go Modules 的普及,vendor 的使用逐漸減少,更多項目傾向于直接使用模塊緩存和 Go Proxy。

總結

go mod vendor 是 Go Modules 提供的一種依賴管理方式,適用于需要離線構建或對依賴有嚴格控制的場景。然而,隨著 Go Proxy 和模塊緩存的完善,其使用頻率逐漸降低。在選擇是否使用 vendor 時,應根據項目需求權衡其優缺點。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63281.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EasyExcel 動態設置表格的背景顏色和排列

項目中使用EasyExcel把數據以excel格式導出&#xff0c;其中設置某一行、某一列單元格的背景顏色、排列方式十分常用&#xff0c;記錄下來方便以后查閱。 1. 導入maven依賴&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easy…

概率論得學習和整理23:EXCEL 數據透視表基礎操作

目錄 1 選擇數據&#xff0c;插入數據透視表 2 選擇數據透視表生成位置 3 出現了數據透視表的面板 4 數據透視表的基本結構認識 4.1 交叉表/列聯表 4.2 row, column, cell 一個新增的篩選器&#xff0c;就這么簡單 4.3 可以只添加 rowcell/值 &#xff0c;也可以colu…

計算機網絡從誕生之初到至今的發展歷程

前言 "上網"&#xff0c;相信大家對這個動詞已經不再陌生&#xff0c;網 通常指的是網絡&#xff1b;在 2024 年的今天&#xff0c;網絡已經滲透到了每個人的生活中&#xff0c;成為其不可或缺的一部分&#xff1b;你此時此刻在看到我的博客&#xff0c;就是通過網絡…

C# 讀取EXCEL的數據批量插入單個PDF里的多個位置

C# 讀取EXCEL的數據批量插入單個PDF里的多個位置 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; usin…

圖論筆記1

1.1鄰接矩陣儲存法 //創建:二維數組vector<vector<int>> graph(n,vector<int>(n,0));//儲存for(int i0;i<m;i){int x1,x2;cin>>x1>>x2;graph[x1-1][x2-1]1;}1.2鄰接表儲存法 補充&#xff1a;c中的list是鏈表 鏈接 //創建&#xff1a;數組…

GB28181系列三:GB28181流媒體服務器ZLMediaKit

我的音視頻/流媒體開源項目(github) GB28181系列目錄 目錄 一、ZLMediaKit介紹 二、 ZLMediaKit安裝、運行(Ubuntu) 1、安裝 2、運行 3、配置 三、ZLMediaKit使用 一、ZLMediaKit介紹 ZLMediaKit是一個基于C11的高性能運營級流媒體服務框架&#xff0c;項目地址&#xf…

iPhone恢復技巧:如何從 iPhone 恢復丟失的照片

在計算機時代&#xff0c;我們依靠手機來捕捉和存儲珍貴的回憶。但是&#xff0c;如果您不小心刪除或丟失了手機上的照片怎么辦&#xff1f;這真的很令人沮喪和煩惱&#xff0c;不是嗎&#xff1f;好吧&#xff0c;如果您在 iPhone 上丟失了照片&#xff0c;您不必擔心&#xf…

如何將你的 Ruby 應用程序從 OpenSearch 遷移到 Elasticsearch

作者&#xff1a;來自 Elastic Fernando Briano 將 Ruby 代碼庫從 OpenSearch 客戶端遷移到 Elasticsearch 客戶端的指南。 OpenSearch Ruby 客戶端是從 7.x 版 Elasticsearch Ruby 客戶端分叉而來的&#xff0c;因此代碼庫相對相似。這意味著當將 Ruby 代碼庫從 OpenSearch 遷…

LeetCode 283.移動零(超簡單講解)

283.移動零 題目示例示例1示例2 解題思路快慢指針實現設計 詳細代碼 題目 給定一個數組 nums&#xff0c;編寫一個函數將所有 0 移動到數組的末尾&#xff0c;同時保持非零元素的相對順序。 請注意 &#xff0c;必須在不復制數組的情況下原地對數組進行操作。 示例 示例1 …

Day8 神經網絡中的導數基礎

Day8 神經網絡中的導數基礎 導數的定義 導數&#xff08;Derivative&#xff09;是微積分中的一個核心概念&#xff0c;用于描述函數在某一點的變化率。簡單來說&#xff0c;導數就是函數值隨自變量微小變化而產生的變化量&#xff0c;即斜率或變化率。假設有一個函數 f ( x…

RequestContextHolder 與 HttpServletRequest 的聯系

1. 什么是 RequestContextHolder&#xff1f; RequestContextHolder 是 Spring 框架 提供的一個工具類&#xff0c;用于在當前線程中存儲和獲取與請求相關的上下文信息。它是基于 ThreadLocal 實現的&#xff0c;能夠保證每個線程獨立存儲和訪問請求信息。 與 HttpServletReq…

SpringBoot配置和啟動

1.內部配置加載順序&#xff1a; 加載規則 加載順序和優先級與配置文件所在路徑有關優先級高的配置會覆蓋優先級低的配置&#xff0c;配置文件會全部加載&#xff0c;遇到相同的配置高優先級覆蓋低優先級命令行參數 -spring.config.location 自定義配置文件路徑&#xff0c;可…

【視頻生成模型】——Hunyuan-video 論文及代碼講解和實操

&#x1f52e;混元文生視頻官網 | &#x1f31f;Github代碼倉庫 | &#x1f3ac; Demo 體驗 | &#x1f4dd;技術報告 | &#x1f60d;Hugging Face 文章目錄 論文詳解基礎介紹數據預處理 &#xff08;Data Pre-processing&#xff09;數據過濾 (Data Filtering)數據標注 (Data…

52 基于單片機的超聲波、溫濕度、光照檢測分階段報警

目錄 一、主要功能 二、硬件資源 三、程序編程 四、實現現象 一、主要功能 1.通過DHT11模塊讀取環境溫度和濕度: 2.將濕度、障礙物距顯示在lcd1602上面&#xff0c;第一行顯示溫度和濕度,格式為:xxCyy%&#xff0c;第二行顯示超聲波傳感器測得的距離&#xff0c;格式為:Di…

大數據與AI:從分析到預測的躍遷

引言&#xff1a;數據時代的新紀元 從每天的社交分享到企業的運營決策&#xff0c;數據早已成為現代社會不可或缺的資源。我們正置身于一個數據爆炸的時代&#xff0c;數以億計的信息流實時生成&#xff0c;為人類帶來了前所未有的洞察能力。然而&#xff0c;數據的價值并不僅限…

3D視覺[一]3D計算機視覺

3D視覺[一]3D計算機視覺 3D計算機視覺概述 像機標定 文章目錄 3D視覺[一]3D計算機視覺前言一、人類視覺二、計算機視覺2.1 計算機視覺的研究目的2.2 計算機視覺的研究任務2.3 計算機視覺的研究方法2.4 視覺計算理論2.5 馬爾框架中計算機視覺表達的四個層次2.5.1 圖像&#xff…

OpenCV目標檢測 級聯分類器 C++實現

一.目標檢測技術 目前常用實用性目標檢測與跟蹤的方法有以下兩種&#xff1a; 幀差法 識別原理&#xff1a;基于前后兩幀圖像之間的差異進行對比&#xff0c;獲取圖像畫面中正在運動的物體從而達到目標檢測 缺點&#xff1a;畫面中所有運動中物體都能識別 舉個例子&#xf…

QT從入門到精通(二) ——信號與槽機制

Qt 的信號與槽機制&#xff08;Signal and Slot&#xff09;是 Qt 框架 中用于對象間通信的核心機制之一。它允許對象之間進行松耦合的事件驅動式通信&#xff0c;尤其適合 GUI 應用程序 中的事件處理。 1. 基本概念 信號 (Signal) 當對象的狀態發生變化時&#xff0c;它會發…

如何使用git新建本地倉庫并關聯遠程倉庫的步驟(詳細易懂)

一、新建本地倉庫并關聯遠程倉庫的步驟 新建本地倉庫 打開終端&#xff08;在 Windows 上是命令提示符或 PowerShell&#xff0c;在 Linux 和Mac上是終端應用&#xff09;&#xff0c;進入你想要創建倉庫的目錄。例如&#xff0c;如果你想在桌面上創建一個名為 “my - project”…

1Panel應用推薦:MaxKB開源知識庫問答系統

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款現代化、開源的Linux服務器運維管理面板&#xff0c;它致力于通過開源的方式&#xff0c;幫助用戶簡化建站與運維管理流程。為了方便廣大用戶快捷安裝部署相關軟件應用&#xff0c;1Panel特別開通應用商店&am…