Go:1.17中`go get`命令的变化及其对开发者的影响
概述
Go语言一直以来都在不断进化,旨在提供更加高效、简洁的编程体验。在Go 1.17版本中,go get
命令的一项重要变更引起了开发者的广泛关注。这一变化主要涉及go get
在安装可执行文件时的用法,它标志着Go社区对模块系统的进一步优化和规范化。本文将深入探讨这一变更的具体内容、背后的原因以及对Go开发者的具体影响。
go get
命令的变更
在Go 1.17及以后的版本中,当开发者尝试使用go get
命令来安装可执行文件时,会遇到以下警告信息:
go get: installing executables with 'go get' in module mode is deprecated.
To adjust and download dependencies of the current module, use 'go get -d'.
To install using requirements of the current module, use 'go install'.
To install ignoring the current module, use 'go install' with a version,
like 'go install example.com/cmd@latest'.
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
这段警告信息说明,使用go get
命令在模块模式下安装可执行文件的做法已被弃用。替代的做法分为几个方向:
- 使用
go get -d
调整和下载当前模块的依赖项,但不安装。 - 使用
go install
在当前模块的上下文中安装程序。 - 使用
go install
搭配版本号在忽略当前模块的情况下安装程序,如go install example.com/cmd@latest
。
背后的原因
这一变更背后的主要原因是为了清晰地区分获取依赖项和安装可执行程序两个操作。在旧版本中,go get
同时承担了下载依赖和安装工具的职责,这在某些情况下会导致依赖管理上的混乱。特别是在开启模块模式(Go Modules)的项目中,go get
的行为更加复杂,容易造成版本依赖上的误操作。Go社区通过这一变更,旨在鼓励开发者更加明确地管理依赖项和安装工具,提高开发效率和项目的可维护性。
对开发者的影响
- 依赖管理和工具安装的明确区分:开发者需要适应使用
go install
来安装工具,而使用go get -d
来仅下载依赖项的新流程。 - 更清晰的版本管理:通过在
go install
命令中指定版本,可以更清楚地管理项目所依赖工具的版本,避免潜在的版本冲突问题。 - 需要更新文档和CI/CD脚本:项目的文档、CI/CD配置及其他自动化脚本可能需要更新,以适配新的命令用法。
结论
Go 1.17中go get
命令的变更是Go社区在模块化管理方面的又一大步。它旨在提高项目管理的清晰度和效率,虽然这需要开发者做出一定的调整,但长远看来,这是向着更加稳健和可维护的项目结构迈进的一步。开发者可以通过官方文档深入了解这一变更,并按照最佳实践更新自己的开发习惯。
转载自:https://juejin.cn/post/7351691676916498443