go语言在1.11版本之前,都是使用GOPATH设置模块搜索路径,导致三方依赖和自定义依赖等随意放置,导致项目逻辑非常混乱。但从1.11版本开始,引入了新的go模块管理机制(go modules)。本文将以1.18版本来对go module做出详解。为什么对版本1.18情有独钟呢,那是因为它推出了工作区的概念,基本思路就是:每一个模块需要一个go.mod文件用于指定模块名和go的版本,并不需要指定引用模块的路径。
样例
创建demo模块
mkdir demo
cd demo
go mod init github.com/demo
go.mod就是整个工程的核心文件。
关键字段介绍:
module: 定义模块路径
go: 设置版本
require: 要求给定版本或更高版本的特定模块
exclude: 排除特定版本模块的使用,不允许的模块版本被视为不可用,并且查询无法返回。
replace:使用不同的模块版本来替代原有模块版本。通常用于本地调试使用。
go.sum是版本管理文件
每行由模块导入路径、模块的特定版本和预期哈希组成
在每次缺少模块时,如果缓存中不存在,则需要下载并计算其哈希添加到 go.sum 中;如果缓存中存在,则需要匹配 go.sum 中的已有条目。