当前位置: 首页 > article >正文

go mod文件为啥又两个require

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

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

    go复制代码require (
        github.com/gin-gonic/gin v1.10.0
        gorm.io/driver/mysql v1.5.7
        gorm.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.kler.cn/a/309250.html

相关文章:

  • C++ 的协程
  • python魔术方法的学习
  • 使用elementUI实现表格行拖拽改变顺序,无需引入外部库
  • python: postgreSQL using psycopg2 or psycopg
  • 智能电视/盒子的应用管理——通过ADB工具优化体验
  • Redis高可用-主从复制
  • C#使用TCP-S7协议读写西门子PLC(四)
  • Qt常用控件——QDateTimeEdit
  • 【华为OD】2024D卷——生成哈夫曼树
  • CAD图纸加密软件哪个好?10款2024主流CAD图纸加密软件分享!
  • 如何利用Samba跨平台分享Ubuntu文件夹
  • 电路设计学习(一)
  • 【Day14-单例设计模式动态代理】
  • 一文吃透JVM面试八股文
  • 每日学习一个数据结构-DFA确定有限状态机
  • 【linux】VisiData:强大的命令行数据处理工具
  • 跟李沐学AI:序列到序列seq2seq
  • 本地部署大模型并使用知识库Windows下Ollama+Docker+MaxKB安装的记录
  • 影刀RPE学习——自动化
  • 地大信息-基础信息平台 GetImg 任意文件读取漏洞复现
  • http和https分别是什么?区别是什么?
  • GO GIN SSE DEMO
  • Springboot项目打war包运行及错误解决
  • SpringCloud Alibaba入门简介
  • 最优化理论与自动驾驶(一):概述
  • 你认为嵌入式软件开发的尽头是什么?