go mod文件为啥又两个require

ops/2024/9/23 0:06:29/

go.mod 文件中,之所以有两个 require 块,这是 Go 自动化依赖管理的结果,具体解释如下:

  1. 主要依赖 (require 第一个块)

    go复制代码require (github.com/gin-gonic/gin v1.10.0gorm.io/driver/mysql v1.5.7gorm.io/gorm v1.25.12
    )
    

    这个块列出了你明确在项目中直接使用的依赖包。你手动在代码中引入了这些依赖(例如:Gin、GORM MySQL 驱动),因此它们被直接列在这里。每个包的版本由你选择或 Go 自动根据模块版本选择。

  2. 间接依赖 (require 第二个块)

    go复制代码require (// 大量 indirect 依赖包
    )
    

    第二个 require 块列出了间接依赖,也称为indirect。这些包不是你直接在代码中引用的,但它们是通过你的直接依赖包引入的。例如,gormgin 可能依赖于其他库,这些库的依赖也会被列在这里。indirect 标志表明这些包并不是你直接依赖的,而是通过你直接使用的依赖库而被间接引入的。

为什么会有两个 require 块?

这是因为 Go 在处理依赖时,将直接依赖和间接依赖进行了区分:

  • 直接依赖 是项目的核心依赖库,由你在项目中手动引入。
  • 间接依赖 是由直接依赖库引入的,Go 自动帮你管理这些间接依赖。

通常情况下,不同的包及其依赖管理的需要会造成这种划分。例如,Gin 框架本身可能依赖了多种与 HTTP、JSON 解析等相关的库,这些库就会被列在 indirect 块中。

为什么保留 indirect

Go 保留 indirect 依赖信息的原因是为了确保在未来的构建中,项目及其依赖库的版本和功能保持一致,防止依赖库升级或改变后引发兼容性问题。

因此,Go 通过记录这些 indirect 依赖,确保即使是间接依赖的库版本也在不同开发环境或未来构建中保持一致。


http://www.ppmy.cn/ops/114485.html

相关文章

ARM驱动学习之9注册字符类设备

ARM驱动学习之9注册字符类设备 • 分配内存空间函数kmalloc – 分配连续的虚拟地址,用于小内存分配。在include/linux/slab.h文件中。 – 参数1:申请的内存大小(最大128K), – 参数2:GFP_KERNEL,代表优先权&#xff0…

c++primer第九章内存模型和名称空间学习笔记

单独编译 程序分为三步 函数定义和变量声明不能放在头文件中。 头文件经常包括的内容 结构声明可以放在头文件中。 头文件coordin.h代码 #ifndef COORDIN_H_ #define COORDIN_H_struct polar {double distance;double angle; }; struct rect {double x;double y; }; polar …

代码随想录算法训练营第五十八天 | 拓扑排序精讲-软件构建

目录 软件构建 思路 拓扑排序的背景 拓扑排序的思路 模拟过程 判断有环 写代码 方法一: 拓扑排序 软件构建 题目链接:卡码网:117. 软件构建 文章讲解:代码随想录 某个大型软件项目的构建系统拥有 N 个文件,文…

植物大战僵尸【源代码分享+核心思路讲解】

植物大战僵尸已经正式完结,今天和大家分享一下,话不多说,直接上链接!!!(如果大家在运行这个游戏遇到了问题或者bug,那么请私我谢谢) 大家写的时候可以参考一下我的代码思…

小琳AI课堂:大语言模型如何符合伦理限制

大家好,这里是小琳AI课堂。今天我们来聊聊大语言模型是如何符合伦理限制的,这可是一个非常重要的话题哦!🌟 首先,我们要知道,大语言模型的伦理限制实现主要通过以下几个方面: 数据筛选和清洗&a…

C++速通LeetCode中等第6题-找到字符串中所有字母异位词(滑动窗口最详细代码注释)

滑动窗口法&#xff1a; class Solution { public:vector<int> findAnagrams(string s, string p) {unordered_map<char,int> need,window;for(char c : p) need[c];int left 0,right 0;int valid 0;vector<int> res;//窗口数据更新while(right < s.s…

面向对象程序设计——set容器の简析

1.set的介绍 • 序列式容器和关联式容器 • 我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间⼀般没有紧…

android 14分屏实战之小米su7的3分屏实现方案讨论及线索征集

背景&#xff1a; hi&#xff0c;粉丝朋友们&#xff1a; 近来有学员朋友询问到了马哥一个问题关于小米su7的分屏实现方案问题&#xff0c;具体小米su7的实现现象如下&#xff1a; 具体源头视频详细地址&#xff1a;https://www.bilibili.com/video/BV1UK421a7iB 针对小米su…