Go语言依赖管理的核心 - go.mod文件解析

简介: Go语言依赖管理的核心 - go.mod文件解析

1. go mod 简介

go mod 是 Go 语言的依赖管理工具,类似于 Node.js 中的 npm 或者 Python 中的 pip,可以大大简化依赖的管理。

它主要解决了这些问题

依赖关系混乱,不清楚具体使用了哪些包和版本

不同机器无法复现相同的依赖构建,导致构建失败

上传代码时缺失依赖,导致他人无法构建

go mod 的主要功能有

使用 go.mod 文件记录依赖信息

自动下载依赖包并缓存在 GOPATH/pkg/mod 目录

可以查询、添加、删除依赖包

可以指定依赖版本,锁定版本

可以设置代理,实现国内下载加速

go mod 基本概念

module:一个模块,通常对应一个代码仓库,一个 module 拥有独立的依赖信息

package:一个 module 中的代码包

dependency:依赖包,一个 module 需要引用的其他 module

一个 module 拥有一个唯一的 module path 以及一个版本号。

go mod 工作原理

go mod 通过 go.mod 文件记录当前 module 的元信息和所有依赖项信息。

然后会自动下载并缓存依赖的包,存放在 GOPATH/pkg/mod 目录。

通过 go mod 管理依赖,就可以很方便地重现相同的依赖环境。


 

2. 创建 go.mod 文件

go.mod 文件存储在模块根目录,记录了当前模块的元数据,包括模块路径、依赖列表等。

使用 go mod init 来初始化 go.mod 文件


go mod init example.com/module

这会生成一个 go.mod 文件


module example.com/module 
go 1.17.5

也可以通过 go build、go run 等命令自动创建 go.mod 文件。


 

3. 查询依赖

使用 go list -m all 可以列出当前 module 的所有依赖


go list -m all

go list -json 可以输出 JSON 格式的数据


go list -json all

使用 go mod graph 可以将依赖图生成 DOT 文件


go mod graph > graph.dot

然后使用 Graphviz 工具生成依赖关系图。


 

4. 添加依赖

使用 go get 可以下载依赖


go get github.com/gin-gonic/gin

这会自动找到合适的版本并写入 go.mod 文件。

如果需要指定版本可以


go get github.com/x/text@v0.3.0

导入包时,如果发现本地没有该依赖包,也会自动下载。


 

5. 更新依赖

使用 go get -u 可以升级依赖包到最新的次要版本。

也可以手动修改 go.mod Require 语句指定版本后,

运行 go get 导致更新。


 

6. 删除依赖

go mod tidy 可以移除不用的依赖项。

也可以直接编辑 go.mod 文件,删除不需要的 module 语句,

然后执行 go mod tidy 重新整理。


 

7. 代理设置

GO111MODULE 需要设置为 on 才会使用 go mod。

GOPROXY 环境变量控制下载代理


export GOPROXY=https://goproxy.cn

GOPRIVATE 控制不走代理的私有模块。


 

8. go mod 实战

假设想开发一个 Web 应用程序



mkdir appcd appgo mod init app

这会初始化一个模块。然后可以引入 gin 框架


go get github.com/gin-gonic/gin

这会自动下载 gin 并记录在 go.mod 文件中。

开发过程中,修改 gin 的版本需求


go mod edit -require=github.com/gin-gonic/gin@v1.1.0go get

构建时,执行 go mod tidy 整理依赖。然后就可以构建发布了。


 

9. go mod 命令参考

go mod download 下载依赖

go mod graph 打印依赖图

go mod init 初始化新模块

go mod edit 编辑 go.mod 文件

go mod tidy 清理依赖

go mod verify 校验依赖


 

10. go mod 技巧

根据 import 自动添加依赖

删除未使用的依赖

排除具体的依赖

模块代理设置


 

11. go mod 原理解析

go.mod 使用语义版本规范,可以记录最小和最大版本号。

环境变量控制代理,实现国内代理加速。

go mod 通过元数据和缓存实现可重现的依赖构建。

目录
相关文章
|
14天前
|
Go
go语言中的数据类型
go语言中的数据类型
11 0
|
4天前
|
关系型数据库 Go API
《Go 简易速速上手小册》第1章:Go 语言基础(2024 最新版)(上)
《Go 简易速速上手小册》第1章:Go 语言基础(2024 最新版)(上)
29 1
|
20天前
|
存储 安全 Go
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
|
1天前
|
数据采集 存储 Go
使用Go语言和chromedp库下载Instagram图片:简易指南
Go语言爬虫示例使用chromedp库下载Instagram图片,关键步骤包括设置代理IP、创建带代理的浏览器上下文及执行任务,如导航至用户页面、截图并存储图片。代码中新增`analyzeAndStoreImage`函数对图片进行分析和分类后存储。注意Instagram的反爬策略可能需要代码适时调整。
使用Go语言和chromedp库下载Instagram图片:简易指南
|
4天前
|
API Go
使用Go语言通过API获取代理IP并使用获取到的代理IP
使用Go语言通过API获取代理IP并使用获取到的代理IP
|
5天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
14天前
|
存储 Java 编译器
go语言基础语法
go语言基础语法
|
20天前
|
存储 缓存 安全
掌握Go语言:Go语言Map,高效键值对集合的应用与注意事项详解(26)
掌握Go语言:Go语言Map,高效键值对集合的应用与注意事项详解(26)
|
Java 编译器 Go
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
前面介绍了Go语言的基础语法,所谓磨刀不误砍柴工,希望大家还是能熟悉掌握这些基础知识,这样后面真正学起Go来才会得心应手。 作为初学者。Go语言的语法有些和java类似,但也有很多不一样的地方。刚开始都会遇到各种各样的坑。下面就来总结下学习go语言的过程中,遇到的各种坑。
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
|
20天前
|
Go 开发者
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)

推荐镜像

更多