为什么 go.mod 中的所有依赖都是间接的?

2024-01-12

我通过运行以下命令来初始化一个 go 项目:

go mod init firstgo_app

我确认模块已创建:

cat go.mod
module firstgo_app

go 1.18

然后我通过执行安装了对 github.com/gin-gonic/gin 的依赖

get github.com/gin-gonic/gin

之后我查看了内容go.mod这次看起来像这样:

cat go.mod
module firstgo_app

go 1.18

require (
    github.com/gin-contrib/sse v0.1.0 // indirect
    github.com/gin-gonic/gin v1.7.7 // indirect
    github.com/go-playground/locales v0.13.0 // indirect
    github.com/go-playground/universal-translator v0.17.0 // indirect
    github.com/go-playground/validator/v10 v10.4.1 // indirect
    github.com/golang/protobuf v1.3.3 // indirect
    github.com/json-iterator/go v1.1.9 // indirect
    github.com/leodido/go-urn v1.2.0 // indirect
    github.com/mattn/go-isatty v0.0.12 // indirect
    github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
    github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect
    github.com/ugorji/go/codec v1.1.7 // indirect
    golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
    golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect
    gopkg.in/yaml.v2 v2.2.8 // indirect
)

我不明白的是所有依赖项都被标记为indirect。我的理解是,它只是被标记的传递依赖indirect但我直接依赖的依赖项不应该被标记为这样。那是github.com/gin-gonic/gin v1.7.7 // indirect不应该有indirect标记,因为这是我专门下载的依赖项。

我认为是这种情况,因为我没有直接使用依赖项,所以我再次重新创建了该模块,但也创建了一个main.go我明确依赖的文件gonic/gin:

cat main.go
package main
import "github.com/gin-gonic/gin"
func main() {
        r := gin.Default()
        r.GET("/ping", func(c *gin.Context) {
                c.JSON(200, gin.H{
                        "message": "pong",
                })
        })
        r.Run() // listen and serve on 0.0.0.0:8080
}

当我尝试构建时,它失败了:

go build
main.go:2:8: no required module provides package github.com/gin-gonic/gin; to add it:
    go get github.com/gin-gonic/gin

但当我跑步时go get github.com/gin-gonic/gin然后构建,所有依赖项go.mod仍然被标记为间接。

那么什么给出呢?我在这里缺少什么?还是我理解的indirect错?


你的理解是正确的。这indirect注释表示依赖项不直接由您的模块使用,仅由其他模块依赖项间接使用。

当你第一次跑步时go get github.com/gin-gonic/gin,该模块将被下载,但由于您不使用它,所以它仍然会被标记indirect.

当你开始使用它时,它就不再是indirect, but go build不更新go mod自动地。

Run go mod tidy,然后就不会被标记了indirect不再了。

$ go mod tidy
$ cat go.mod
module firstgo_app

go 1.18

require github.com/gin-gonic/gin v1.7.7

require (
        github.com/gin-contrib/sse v0.1.0 // indirect
        github.com/go-playground/locales v0.13.0 // indirect
        github.com/go-playground/universal-translator v0.17.0 // indirect
        github.com/go-playground/validator/v10 v10.4.1 // indirect
        github.com/golang/protobuf v1.3.3 // indirect
        github.com/json-iterator/go v1.1.9 // indirect
        github.com/leodido/go-urn v1.2.0 // indirect
        github.com/mattn/go-isatty v0.0.12 // indirect
        github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
        github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect
        github.com/ugorji/go/codec v1.1.7 // indirect
        golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
        golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect
        gopkg.in/yaml.v2 v2.2.8 // indirect
)

这是从那时起Go 1.14 https://go.dev/doc/go1.14:

除以下命令外的 go 命令go mod tidy不再编辑go.mod如果更改只是装饰性的,则归档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 go.mod 中的所有依赖都是间接的? 的相关文章

随机推荐

  • 导入 scipy 错误:无法导入名称 '_ccallback_c'

    I use Anaconda3 windows导入scipy v1 0 0 但我编译时出错 我在网上查了其他类似的案例 但没有找到解决方案 有人有任何想法吗 import numpy as np import scipy 错误信息 Impo
  • 使用 Python 将 .h5 文件转换为 .jpg

    我目前有一个包含灰度图像的 h5 文件 我需要将其转换为 jpg 有人有这方面的经验吗 注意 我可以将 h5 文件转换为 numpy 数组 然后使用 pypng 等外部库将其转换为 png 但我想知道是否有更有效的方法来转换为图像 最好是
  • 从Python中的另一个函数中断函数执行

    我有一个函数a执行一些任务和其他功能b是对某些事件的回调 每当事件发生时 函数b被调用 我想让它能够中断函数的执行a 这两个函数都在同一个类中声明 功能a不应该调用函数b 功能b是完全独立的 它是对来自 ROS 机器人操作系统的 检测到用户
  • 是否可以直接选择 EXISTS 作为位?

    我想知道是否可以做这样的事情 这不起作用 select cast exists select from theTable where theColumn like theValue as bit 看起来应该是可行的 但是很多应该在 SQL
  • MSDeploy/WebDeploy - 通过 DacPac 部署复合数据库项目

    我们有一个数据库项目 其中的视图连接到另一个数据库中的表 另一个数据库采用不同的解决方案 在我们从其他数据库添加对 DacPac 的引用之前 此构建失败 我相信这些视图被视为 复合数据库对象 因为它们引用的对象未作为脚本包含在数据库中 而是
  • 用 C/C++ 计算 32 位 CRC 查找表

    我想计算一个 32 位 CRC 查找表 我尝试的一种方法是使用以下代码这个网站 http www barrgroup com Embedded Systems How To CRC Calculation C Code include
  • Map/Set 维护唯一的数组数组,Javascript

    我正在尝试构建唯一的数组数组 这样每当我要添加新数组时 只有在集合中尚不存在该数组时才应添加它 例如 存储 1 1 2 的所有唯一排列 实际的 1 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 1 预期的 1 1 2 1
  • FullCalendar.js - “获取事件时出错”

    我正在使用 FullCalendar js 显示来自多个来源的 Google 日历事件 到今天为止一直工作正常 由于某种原因 FullCalendar 开始弹出 获取事件时出错 错误消息 并且所有事件显然都消失了 这是一个jsfiddle
  • 保存到 UserDefaults 时应用程序总是崩溃

    我不知道出了什么问题 extension UserDefaults static let shared UserDefaults suiteName SharedGroupName static func set object Any fo
  • 正则表达式查找具有不同顺序的相同数字的数字

    我已经在 Google 上寻找正则表达式一个小时左右了 但似乎无法解决这个问题 如果我有电话号码 请说 2345 我想找到具有相同数字但顺序不同的任何其他数字 如下所示 2345 比如我匹配 3245 or 5432 数字相同但顺序不同 我
  • 同步数据从主存储器读取/写入

    当synchronized方法执行完成时 是只将其修改的数据推送到主存 还是所有的成员变量 同样 当synchronized方法执行时 是只从主存中读取自己需要的数据 还是清除所有的成员变量 缓存中的成员变量并从主存中读取它们的值 例如 p
  • 如何在 Tensorflow 2.0 中应用 Guided BackProp?

    我从Tensorflow 2 0并尝试实现 Guided BackProp 来显示显着性图 我首先计算之间的损失y pred and y true图像的梯度 然后找到由于这种损失而导致的所有层的梯度 with tf GradientTape
  • 在React中获取存储在Azure Blob存储中的json文件数据

    我是 React 新手 我正在尝试从存储在 Azure blob 存储中的 json 文件获取数据 file https mcbstorageprod blob core windows net exports person json 我使
  • ALSA:不支持非交错访问?

    ALSA s snd pcm hw params set access http www alsa project org alsa doc alsa lib group p c m h w params html ga4c8f1c6329
  • C# 如何将整数视为数组? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 假设我有 5 个整数这不是数组 我想
  • Arduino F()宏的实现

    我试图了解 Arduino 中的 F 宏实际上对 PGMEM 和 RAM 做了什么以及运行时的影响是什么 有人可以指出定义这个宏的文件吗 这可能是旧版本 但定义它的一个地方是Wstring h as in here http andybro
  • 即使 ssh 有效,Gitlab 也无法克隆存储库

    正如标题所述 即使 ssh 似乎可以工作 我也无法从 Gitlab 6 服务器克隆存储库 当尝试克隆时 它看起来像这样 git clone ssh email protected cdn cgi l email protection 133
  • 如何正确删除使用sonata-media-bundle上传的所有图像

    我已经按照建议使用 sonata media bundle 上传了一些图像here http sonata project org bundles media 2 2 doc reference usage html media new M
  • 切换按钮和开关的区别

    切换按钮和开关有什么区别 由于它们提供相同的功能 使用切换按钮或开关的具体用例是什么 切换按钮 Switch 这更多的是一个用户体验问题 而不仅仅是编码问题 这是我的回答 该控件的描述是这样说的 Toggle是一个按钮 sap m Togg
  • 为什么 go.mod 中的所有依赖都是间接的?

    我通过运行以下命令来初始化一个 go 项目 go mod init firstgo app 我确认模块已创建 cat go mod module firstgo app go 1 18 然后我通过执行安装了对 github com gin