【笔记】Go语言项目通过GoMod管理依赖

前言

Go语言项目通过GoMod管理依赖

准备工作

开启GoMod管理项目依赖

通用

1
go env -w GO111MODULE=on

Windows

1
SET GO111MODULE=on

MacOS

1
export GO111MODULE=on

初始化项目

  • 在项目根目录下,通过go mod init初始化项目,将项目的依赖交由go mod管理

<project_name>:指定项目名。项目名与真实路径名无关。项目名通常由域名/项目名/模块名构成。如果没有指定项目名,会自动根据当前目录结构生成项目名

1
go mod init <project_name>
  • 此时会在项目根目录下生成go.modgo.sum两个文件,go.mod文件用于定义项目中引用的依赖,go.sum文件用于校验依赖的完整性以及是否被篡改

包含这两个文件的项目表示交由go mod管理项目依赖
不包含这两个文件的项目表示不交由go mod管理项目依赖

在使用Git管理项目时,推荐将go.modgo.sum文件都交给Git管理

将项目域名指向本地(可选)

  • 如果项目中有多个模块,在本地开发时需要将其他模块的项目域名指向本地

因为Go语言中模块间的引用都是通过域名的方式(云的方式),而本地项目还没有推送到云,所以在开发本地项目时需要先手动指定当前项目映射为本地路径

<src>:当前项目根目录所在的本地绝对路径

go.mod
1
2
require <project_name> v0.0.0
replace <project_name> => <src>

引入依赖

手动引入依赖

  • go.mod配置文件中添加项目引用的依赖包全称

github.com/xxx/xxx:依赖包全称
v0.0.0:依赖包版本号

go.mod
1
2
3
require (
github.com/xxx/xxx v0.0.0
)

自动引入依赖

  • 此操作会先下载依赖,在将依赖引入到项目

所谓引入到项目,其实就是自动在go.mod文件中添加一行配置
此操作类似于npm

github.com/xxx/xxx:依赖包全称
v0.0.0:依赖包版本号,如果不指定自动引入最新版本

1
go get github.com/xxx/xxx v0.0.0

仅下载依赖

  • 如果项目中已经定义了依赖,仅需要做下载依赖的操作
1
go mod download 

自动更新依赖

  • 此操作会检查项目中已经引入的所有依赖,检测本地是否已下载,如果未下载,则重新下载到本地

通常用于没有下载依赖的旧项目重新下载依赖

1
go mod tidy

踩坑

  • 在IDEA中执行了go mod tidy命令后,此时有可能引用了依赖的代码还是报错,需要双击目录列表的External Libraries/Go Modules,查看一下下载得到所有依赖的包,然后代码就不会报错了

编译依赖

  • 某些Go项目的使用通常时使用可执行文件而不是将依赖引入项目,为了使用这些项目的可执行文件,只需要直接编译依赖得到可执行文件即可
1
go mod install

校验依赖

  • 手动修改依赖后,校验已经引入的依赖是否存在
1
go mod verify

打印依赖图

1
go mod graph

手动编辑依赖

1
go mod edit

将依赖移动到vendor目录下

1
vendor

完成

参考文献

哔哩哔哩——开心学Tymon
哔哩哔哩——弯曲的一条虫
哔哩哔哩——地鼠文档