美文网首页
go依赖包管理--间接依赖

go依赖包管理--间接依赖

作者: 九楼记 | 来源:发表于2022-09-18 23:05 被阅读0次

indirect含义

在使用Go module过程中,随着引入的依赖增多,会发现go.mod文件中部分依赖包后面会出现一个// indirect的标识。这个标识总是出现在require指令中,其中//与代码的行注释一样表示注释的开始,indirect表示间接的依赖。

直接依赖: 一般而言,没有添加// indirect注释的包则是直接依赖的包,即明确的出现在某个import语句中;
间接依赖:被添加indirect注释的包肯定是间接依赖的包;

强调的是:并不是所有的间接依赖都会出现在 go.mod文件中。
间接依赖出现在go.mod文件的情况,可能符合下面所列场景的一种或多种:

  • 直接依赖未启用 Go module
  • 直接依赖go.mod 文件中缺失部分依赖

总结

为什么要记录间接依赖

如果某个依赖B 没有go.mod文件,在A 的go.mod文件中已经记录了依赖B及其版本号,为什么还要增加间接依赖呢?

我们知道Go module需要精确地记录软件的依赖情况,虽然此处记录了依赖B的版本号,但B的依赖情况没有记录下来,所以如果B的go.mod文件缺失了(或没有)这个信息,则需要在A的go.mod文件中记录下来。此时间接依赖的版本号将会根据Go module的版本选择机制确定一个最优版本。

如何处理间接依赖

间接依赖出现在go.mod中,可以一定程度上说明依赖有瑕疵,要么是其不支持Go module,要么是其go.mod文件不完整。

如何查找间接依赖

Go module提供了go mod why 命令来解释为什么会依赖某个软件包,若要查看go.mod中某个间接依赖是被哪个依赖引入的,可以使用命令go mod why -m <pkg>来查看。

[root@wsl-maoyifei]# go mod why -m github.com/Rican7/retry
# github.com/Rican7/retry
github.com/renhongcai/gomodule
github.com/renhongcai/indirect
github.com/Rican7/retry

上面的打印信息中# github.com/Rican7/retry 表示当前正在分析的依赖,后面几行则表示依赖链。github.com/renhongcai/gomodule 依赖github.com/renhongcai/indirect,而github.com/renhongcai/indirect依赖github.com/Rican7/retry。由此我们就可以判断出间接依赖github.com/Rican7/retry是被github.com/renhongcai/indirect引入的。

go mod why,默认会给出一个main包到要查询的packge的最短依赖路径,加上 -m是按照模块查找依赖,并给出main包到每个module中每个package的最短依赖路径(如果依赖的话)。

reference

[1] 码上快乐——go依赖包管理-间接依赖
[2] https://blog.csdn.net/qq_32907195/article/details/126173276

相关文章

  • go依赖包管理--间接依赖

    indirect含义 在使用Go module过程中,随着引入的依赖增多,会发现go.mod文件中部分依赖包后面会...

  • Go的间接依赖

    为什么已经在module/项目中使用go mod download下来所需依赖了,但是之后运行go 命令仍然出现了...

  • GO Modules 使用

    旧项目迁移,打算使用GO Modules 作为依赖管理。 go版本 1.12 私人依赖包,如何处理 1. 创建模块...

  • 风中的 FAQ-2

    51.go modules依赖管理 简介一般从GOPATH、vendor文件夹下寻找依赖包。使用该功能后根据go....

  • go modules详解

    go modules详解 [TOC] go1.11开始,支持使用go modules管理依赖包. 刚加入的适合尝试...

  • Go包和依赖管理

    构建可复用的模块(包) package: 基本复用模块单元以首字母大写来表明可被包外代码访问 代码的 packag...

  • Go语言的依赖管理

    Go语言的依赖管理随着版本的更迭正逐渐完善起来。 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三...

  • Go语言 依赖管理

    Go语言 依赖管理 go依赖管理的三个阶段 GOPATH GOVENDOR go mod GOPATH默认在~/g...

  • GO语言包版本管理

    序言 刚接触GO时有同事问你们项目是怎么管理依赖包的,尴尬的是当时并没有很强的包版本依赖所以。。。蜜汁尴尬。生成环...

  • Go 包管理工具 govendor 使用指南

    专栏地址:技术文章专栏 govendor 是 go 语言依赖管理工具。 安装及初始化 安装: 初始化: 下载依赖包...

网友评论

      本文标题:go依赖包管理--间接依赖

      本文链接:https://www.haomeiwen.com/subject/megeortx.html