为什么从 Go 1.17 开始 go.mod 中有两个“require”块?

2024-01-17

我创建了一个小型 go 应用程序。几天前我已经从 go 1.15 升级到 1.17 并且我还升级了软件包go get -u。更改后,我的 go.mod 文件中有 2 个 require 块。为什么?这是什么意思?没问题还是有什么东西坏了?

应用程序仍然可以正确构建。

go.mod 文件:

module github.com/jozo/simple-pomodoro

go 1.17

require (
    fyne.io/fyne/v2 v2.1.0
    github.com/dsnet/golib/memfile v1.0.0
    github.com/faiface/beep v1.1.0
    github.com/fsnotify/fsnotify v1.5.1 // indirect
    github.com/go-gl/gl v0.0.0-20210905235341-f7a045908259 // indirect
    github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210727001814-0db043d8d5be // indirect
    github.com/godbus/dbus/v5 v5.0.5 // indirect
    github.com/hajimehoshi/oto v1.0.1 // indirect
    github.com/srwiley/oksvg v0.0.0-20210519022825-9fc0c575d5fe // indirect
    github.com/srwiley/rasterx v0.0.0-20210519020934-456a8d69b780 // indirect
    github.com/yuin/goldmark v1.4.1 // indirect
    golang.org/x/exp v0.0.0-20210916165020-5cb4fee858ee // indirect
    golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d // indirect
    golang.org/x/mobile v0.0.0-20210924032853-1c027f395ef7 // indirect
    golang.org/x/net v0.0.0-20210929193557-e81a3d93ecf6 // indirect
    golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect
    golang.org/x/text v0.3.7 // indirect
    gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
)

require (
    github.com/davecgh/go-spew v1.1.1 // indirect
    github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 // indirect
    github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff // indirect
    github.com/pkg/errors v0.9.1 // indirect
    github.com/pmezard/go-difflib v1.0.0 // indirect
    github.com/stretchr/testify v1.7.0 // indirect
)

因为在 Go 1.17 中,模块图已更改为启用修剪和延迟加载。第二require块包含间接依赖项。

https://golang.org/doc/go1.17#go-command https://golang.org/doc/go1.17#go-command

如果模块指定 go 1.17 或更高版本,模块图仅包含其他 go 1.17 模块的直接依赖关系,而不是它们的完整传递依赖。 [...]

[...] 如果模块在其 go.mod 文件中指定 go 1.17 或更高版本,则其 go.mod 文件现在包含为每个提供传递导入包的模块提供显式的 require 指令。 (在以前的版本中,go.mod 文件通常只包含直接导入包的明确要求。)

由于扩展后的 Go 1.17 go.mod 文件中显式需求的数量可能会大得多,因此 go 1.17 模块中新添加的间接依赖项需求将维护在将 require 块与包含直接依赖项的块分开。

注:go.mod您在问题中发布的文件有//indirect第一个 require 块中的依赖项。我怀疑,根据引用文档中的“新添加”措辞,这是因为那些//indirect依赖项已经在那里列出并且go mod tidy不重新排列它们。如果你:

  • 手动删除其中之一
  • 和/或重新创建go.modGo 版本设置为的文件1.17或更高
  • 和/或运行go mod tidy -go=1.17

那么它将分离直接和//indirect两个块中的依赖关系。无论如何,这是一种视觉上的便利,文档没有mandate创建两个单独的块。


附加参考:

  • 图剪枝:https://go.dev/ref/mod#graph-pruning https://go.dev/ref/mod#graph-pruning

  • 行为依赖于go.mod's go指示:https://go.dev/ref/mod#go-mod-file-go https://go.dev/ref/mod#go-mod-file-go

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

为什么从 Go 1.17 开始 go.mod 中有两个“require”块? 的相关文章

随机推荐

  • 函数不会在关闭完成块中触发

    所以我有一个视图控制器 当用户登录时它会被关闭 在关闭函数完成块中 我触发了一个应该重新加载下一个视图控制器的函数 什么也没发生 空白视图控制器 但是 如果我在登录后关闭应用程序 然后重新打开它 一切都会按预期加载 这是我的登录功能 fun
  • 如何在 Visual Studio 中为自定义配置文件添加配置转换?

    我正在从事的项目涉及从配置文件读取大量服务端点 url 由于列表相当大 我决定将它们保存在自定义配置文件中 以保持我的 web config 干净且小 我将自定义部分添加到我的网站中 如下所示
  • Active Directory LDAP 查询结果始终缺少已知存在的属性

    这是我目前遇到的一个问题 用户个人资料有一个属性 EmployeeID 当使用以下命令查看该用户时会出现该属性广告浏览器 http technet microsoft com en us sysinternals bb963907 aspx
  • HTML5 离线应用程序缓存更新未在 Firefox 中显示

    我的文档根目录中有一个index php 文件 它产生以此开头的输出 manifest appcache 告诉浏览器缓存它以供离线使用 再次 相关部分 CACHE MANIFEST version 8 25 2011 CACHE inter
  • 无法在 call.enqueue 的 for 循环之外获取 ArrayList

    我想从 Retrofit 中的 call enqueue 方法中获取 ArrayList 数据 如何访问 call enqueue 方法之外的列表 一切正常 当打印列表大小时 我得到了我想要的值 唯一的问题是我无法从 call enqueu
  • 在 Swift 中设置带有边距的 UITableViewCell 框架

    我正在尝试制作一个具有左右边距 插图的 UITableViewCell 我过去曾使用 Objective C 使用以下代码完成此操作 void setFrame CGRect frame frame origin x 25 frame si
  • 使用 C++ 11 进行重构

    鉴于 c 提供的新工具集 许多程序员以代码简化 表现力 效率为目标 浏览旧代码并进行调整 有些毫无意义 有些成功 以实现他们的目标 虽然尽量不要在此类工作上浪费太多时间 而只是进行非侵入性且独立的更改 但最佳实践是什么 让我划掉显而易见的部
  • instanceof 检测接口时产生不一致的结果?

    有什么棘手的事情我应该知道吗instanceof 我通过一些方法传递对象列表 并使用以下方法测试这些对象是否实现特定接口instanceof 在某些情况下 instanceof正确地将对象识别为实现接口 但在其他情况下则不然 它似乎在不同地
  • 将日期/时间解析为本地时区

    我正在尝试从服务器端绑定视图持有者解析日期 时间 json 我试图解析的日期字符串是这样的 2018 06 25T08 06 52Z 这是我正在使用的代码 从另一个堆栈溢出线程获取它 try SimpleDateFormat df new
  • Visual Studio 2010 中的 Visual C++ 中的 LNK 2005

    我正在尝试在 MS VS 2010 中编译使用 Visual C 2005 和 MFC 编写的 C 程序 遗憾的是 我在编译过程中遇到以下错误 Error 2 error LNK2005 public virtual thiscall CM
  • 在开发服务器上测试/预览 Github 分支

    我刚刚从 svn 迁移到 github 我和我的团队运行本地测试 并在中央开发服务器上提交更改和测试 每当我们将更改推送到存储库时 我希望自动将对存储库任何分支的更改拉入开发服务器上的文件夹中 这将使我和我的团队能够使用我们的中央开发服务器
  • 如何查询在 Parse 中设置为指向其他表的指针的列的值

    我在用Parse http parse com对于我的应用程序 我想查询一个表 其中的列设置为指向其他表的指针 这是查询 ParseQuery query new ParseQuery CategoryAttribute query whe
  • 将十六进制字符串转换为文本的 NSString?

    我需要将十六进制值的 NSString 转换为文本 ASCII 的 NSString 例如 我需要类似的东西 68 65 78 61 64 65 63 69 6d 61 6c to be hexadecimal 我查看并调整了代码这个线程
  • NHibernate - 查询中的错误列

    我遇到了 NHibernate 的间歇性问题 它生成一个实体的查询 但将其中一个列替换为来自完全不同 且不相关 实体的列 它只替换单个列 并且通常通过重新启动应用程序来解决 尽管有时需要几次尝试 ASP NET 应用程序 NET 4 0 S
  • ASP.NET Web 应用程序文件路径(在 Azure 上发布)

    问题 对于一个学校项目 我创建了一个 REST Web 服务 该服务与一个数据库链接 该数据库从 Excel 文件获取数据 在我的 Migration Configuration cs 类中 我读取了 excel 文件并将它们放入数据库中
  • 如何解决实体映射中的 Grails 错误重复列?在现有的 Postgresql 数据库上

    您好 我在 Grails 中有以下域 class Customer static mapping table customer version is set to false because this isn t available by
  • config.json - 在 ASP.NET vNext 中添加数据库连接字符串

    我正在学习 ASP NET vNext 我需要在 config json 文件中存储两个连接字符串 我如何存储这些 我可以这样做吗 配置 json connectionStrings connection 1 server connecti
  • 在 Python Tkinter 窗口中显示 Google Map API

    大家好 我正在用 Python 开发 Google Map API 我正在使用可以在这里找到的源代码website http pymaps googlecode com svn trunk pymaps py 此代码编译后会生成一个 htm
  • Linux 中有挂起/恢复信号吗?

    我的应用程序需要对休眠模式做出反应 以便它可以在暂停时执行一些操作 在恢复时执行其他操作 我找到了一些特定于分布式的方法来实现它 Upower DBus 但没有找到任何通用的方法 有办法做到吗 Thanks 一个简单的解决方案是使用自管 打
  • 为什么从 Go 1.17 开始 go.mod 中有两个“require”块?

    我创建了一个小型 go 应用程序 几天前我已经从 go 1 15 升级到 1 17 并且我还升级了软件包go get u 更改后 我的 go mod 文件中有 2 个 require 块 为什么 这是什么意思 没问题还是有什么东西坏了 应用