汕头站扩建进展,动漫网页设计作品欣赏,阿里大鱼wordpress插件,天元建设集团有限公司破产重组文章目录 什么是 Go Modules为什么要使用 Modules怎么使用前置条件项目初始化如何安装/管理依赖#xff1f;依赖安装 go get版本选择方式 替换版本 replace间接依赖 go mod tidy远程代理 总结 什么是 Go Modules
Module 是 Go 的依赖管理工具。
核心概念
Module… 文章目录 什么是 Go Modules为什么要使用 Modules怎么使用前置条件项目初始化如何安装/管理依赖依赖安装 go get版本选择方式 替换版本 replace间接依赖 go mod tidy远程代理 总结 什么是 Go Modules
Module 是 Go 的依赖管理工具。
核心概念
Modules 模块 定义简易来说go.mod 文件所处的根目录即为模块一个 modules 中包含了多个 package。Package 包 一个文件夹下的多个 go 文件构成了一个包每个文件顶部都有 package xxx 的声明文件所属的包Version 版本 一个版本标识模块的一个不可变快照每个版本以 v 开头。版本包括 主版本号、次版本号、补丁版本号等。 在 Go Modules 中每次创建一个大版本必须创建一个新的子目录。如 github.com/pelletier/go-toml/v2
为什么要使用 Modules
简单来说go Modules 大势所趋。
从历史来说在 Modules 之前使用 vendor进行包管理。vendor 的管理方式非常简单 将项目的所有依赖项复制到本项目的 vendor 目录下需要时首先从 vendor 目录中寻找。
vendor 的缺点非常明显当你将依赖下载到 vendor 目录下时是无法指定版本的而且你也很难感知到自己所下载的依赖版本。
Modules 提供的一个核心能力就是对依赖版本的管理。
怎么使用
前置条件 go 版本 1.11 设置 GO111MODULE go proxy go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct
开启 go111Module 之后go 会在 modules 根目录下找依赖而不会去 gopath 中找当前默认值时auto。
项目初始化
go mod init 初始化一个模块该命令生成一个 go mod 文件管理依赖项。
如何安装/管理依赖
依赖安装 go get
go get 命令下载、编译、安装命令如下
go get dependenctversiongo get 会将依赖安装到 $gopath/pkg/mod可以通过指定版本号
同时go get 还可以对依赖进行更新命令如下 go get -u dependece使用上述 go get 命令时go modules 会自动更新 go.mod记录新的依赖项。
版本选择方式
安装依赖时对版本的选择有多种方式通配符匹配、比较运算符、精确版本。
通配符 ( * ) 匹配任意数字或者字符例如 v1.2.* 可以匹配任意版本 比较版本 大于某版本 大于等于某版本 小于某版本 小于等于某版本! 不等于某版本-范围 v1.0-v1.3包含边界 精确版本 直接使用具体的版本号 v1.2.3
替换版本 replace
go mod repalce module replacement 将 module 替换为 replacement
go mod replace github.com/example/foo v1.2.3 更换版本
go mod replace github.com/example/bar …/some-local-module 更换为本地版本
使用 go mod replace 之后需要使用 go mod tidy 更新 go mod go sum 文件。
一般是用于测试。其他场景避免使用
间接依赖 go mod tidy 直接依赖直接依赖是您在项目的 go.mod 文件的 require 部分明确列出的依赖项。这些依赖项通常是您在代码中直接导入并使用的模块它们是您项目直接依赖的模块。 非直接依赖非直接依赖是其他模块的依赖项也就是您项目的直接依赖项所依赖的模块。这些非直接依赖项不会在您项目的 go.mod 文件的 require 部分中列出而是在其他模块的 require 部分中列出。
go mod tidy 命令是 Go Modules 中的一个命令用于维护和更新项目的 go.mod 和 go.sum 文件以保持依赖项的一致性和正确性。
在执行 go mod tidy 命令时Go 编译器会增加缺失的依赖、删除未使用的直接依赖项、更新直接依赖项的版本、更新 go.sum 文件
远程代理
Go Modules 支持使用远程代理来加速模块的下载和构建过程简单来说无法直接访问 Go 官网时通过代理进行下载。具体命令
go env -w GOPROXYhttps://goproxy.cn,direct配置完成后通过 go get、go mod tidy 时首先使用代理网站下载更新依赖。
总结
我对 Go Modules 的理解通过 Modules 实现了对依赖的版本控制所有的依赖默认下载在 $GoPath/pkg/mod 下Modules 通过 go.mod 文件指明当前项目所使用的依赖及其具体版本。