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.rhkb.cn/news/493247.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot453工资信息管理系统(论文+源码)_kaic

工资信息管理系统的设计与实现 摘要 伴随着信息技术与互联网技术的不断发展,人们进到了一个新的信息化时代,传统管理技术性没法高效率、容易地管理信息内容。为了实现时代的发展必须,提升管理高效率,各种各样管理管理体系应时而生…

浅谈目前我开发的前端项目用到的设计模式

浅谈目前我开发的前端项目用到的设计模式 前言 设计模式很多,看到一个需求,项目,我们去开发的时候,肯定是做一个整体的设计进行开发,而在这次我项目中,我也做了一个整体的设计,为什么要设计&a…

批量DWG文件转dxf(CAD图转dxf)——c#插件实现

此插件可将指定文件夹及子文件夹下的dwg文件批量转为dxf文件。 (使用方法:命令行输入 “netload” 加载插件,然后输入“dwg2dxf”运行,选择文件夹即可。) 生成dxf在此新建的文件夹路径下,包含子文件夹内的…

Windows安全中心(病毒和威胁防护)的注册

文章目录 Windows安全中心(病毒和威胁防护)的注册1. 简介2. WSC注册初探3. WSC注册原理分析4. 关于AMPPL5. 参考 Windows安全中心(病毒和威胁防护)的注册 本文我们来分析一下Windows安全中心(Windows Security Center…

linux---多线程

线程的基本概念 定义:在Linux中,线程是进程内部的一个执行单元,是进程的一个实体,它是CPU调度和分派的基本单位。一个进程可以包含多个线程,这些线程共享进程的资源,如代码段、数据段、打开的文件、信号处理…

将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?

随着科技的飞速发展,4G太阳能无线监控系统以其独特的优势在远程监控领域脱颖而出。这种系统结合了太阳能供电的环保特性和4G无线传输的便捷性,为各种环境尤其是无电或电网不稳定的地区提供了一种高效、可靠的视频监控解决方案。将这些视频流接入大屏显示…

有监督学习 vs 无监督学习:机器学习的两大支柱

有监督学习 vs 无监督学习:机器学习的两大支柱 有监督学习 vs 无监督学习:机器学习的两大支柱一、有无“老师”来指导二、解决的问题类型不同三、模型的输出不同 有监督学习 vs 无监督学习:机器学习的两大支柱 在机器学习的奇妙世界里&#…

SLURM资料

SLURM资料 Quick Start 基本概念 job step: 作业步,单个作业可以有多个作业步partition:分区,作业需要在特定分区中运行(理解为定义了队列,每个队列中包含不同节点)QOS:服务质量&a…

App自动化之dom结构和元素定位方式(包含滑动列表定位)

DOM结构 先来看几个名词和解释: dom: Document Object Model 文档对象模型 dom应用: 最早应用于html和js的交互。界面的结构化描述, 常见的格式为html、xml。核心元素为节点和属性 xpath: xml路径语言,用于xml 中的节点定位,X…

Vulhub:Redis[漏洞复现]

4-unacc(Redis未授权代码执行) 启动漏洞环境 docker-compose up -d 阅读vulhub给出的漏洞文档 cat README.zh-cn.md # Redis 4.x/5.x 主从复制导致的命令执行 Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。 Redis未授权访问在4.x/5.0.5以…

imx6ull qt多页面控制系统(正点原子imx系列驱动开发)

开题答辩完了也考完了四六级,赶紧来更新一下一个月前留下的坑吧 QAQ首先,因为毕业设计需要用到这些知识所以就从网络上找了一个智能车机系统,借鉴了一下大佬的项目思路,缝缝补补一个月终于完成了这一内容。 在这里先感谢从两位大佬…

前端小白学习之路-Vben探索 vite 配置 - 1/50

目的 为ApiHug 寻找一个前端解决方案前端背景知识缺乏整盘操作:前后全栈80% 中小规模项目提效 30% 全员全栈快速构建高度模块化AI Native... 所以 裸学前端高举高打,直接从复杂项目拆解AI 助手高度依赖后端癖严重,高度模块, 结构化…

Docker:Dockerfile(补充四)

这里写目录标题 1. Dockerfile常见指令1.1 DockerFile例子 2. 一些其他命令 1. Dockerfile常见指令 简单的dockerFile文件 FROM openjdk:17LABEL authorleifengyangCOPY app.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]# 使…

谷歌浏览器的扩展市场使用指南

谷歌浏览器的扩展市场为用户提供了丰富多样的功能扩展,可以大幅提升浏览体验。本文将为你详细介绍如何使用谷歌浏览器的扩展市场,包括安装、管理和一些推荐的无障碍工具、图标重置方法和便捷操作技巧。(本文由https://chrome.py010.cn/的作者…

04、Vue与Ajax

4.1 发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括: 4.1.1. 原生方式 使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest() xhr.open() xhr.send() xhr.onreadystatechange function(){} 4.1.2. 原生方式 使用浏览器内置的JS函…

网络安全概论——防火墙原理与设计

一、防火墙概述 防火墙是一种装置,它是由软件/硬件设备组合而成,通常处于企业的内部局域网与 Internet 之间,限制 Internet 用户对内部网络的访问以及管理内部用户访问 Internet 的权限。换言之,一个防火墙在一个被认为是安全和可…

南城云趣:智能云平台,杜绝电动车充电安全隐患

电动自行车作为绿色低碳出行的主要方式之一,受到无数市民的推崇,而电动自行车数量的急剧上涨,也严重增加小区管理的负担。记者调查发现,目前电动自行车缺乏有效的管理,使得带车或电瓶上楼充电、乱停乱放、车辆容易被盗等安全问题日益突出,给社区消防安全和管理带来严峻的挑战。…

Linux 文件系统目录结构及其简要介绍

👋 欢迎来到“Linux学习:Linux 文件系统目录结构”篇! 接下来让我们一起来学习一下Linux 文件系统目录结构吧!祝你有所收获! 文章目录 总结表格Linux 文件系统目录结构及其简要介绍补充小资源 小伙伴们都知道&#xff…

【服务器】MyBatis是如何在java中使用并进行分页的?

MyBatis 是一个支持普通 SQL 查询、存储过程和高级映射的持久层框架。它消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 …

Elasticsearch-DSL高级查询操作

一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…