随着go语言的不断完善,模块的使用可能会移除对GOPATH和go get命令的支持。
我们可以尝试的使用mod文件,不再将代码仅仅是存放在GOPATH/src目录之中,而是我们自定义工作目录都可以顺利导包。
我们需要在那个目录下创建一个go.mod文件,从文件目录中运行go命令。
文章目录
一、模块概念介绍
module是一个相关Go包的集合,它是源代码更替和版本控制的单元。
模块由源文件形成的go.mod文件的根目录定义,包含go.mod文件的目录也被称为模块根。
随着项目的复杂,我们需要更好的管理包,那么moudles
必然会取代旧工程中的GOPATH。模块路径是导入包的路径前缀,go.mod文件定义模块路径,而且还可以指定报的特定版本。
1.1 认识go.mod文件
// go.mod
module Micro-Go/ch13/13.2
go 1.16
require (
github.com/gogo/protobuf v1.3.2
github.com/golang/protobuf v1.5.2
)
在上面的 go.mod文件中,我们来详细了解一下文件的内容:
go.mod声明Micro-Go/ch13/13.2
路径为module的根目录,同时也声明了module依赖特定版本包:github.com/gogo/protobuf v1.3.2
和 github.com/golang/protobuf v1.5.2
。
1.2 go.mod文件的模块引入、替换、排除
go.mod文件还可以指定要替换和排除的版本,命令行会自动根据go.mod文件来维护需求声明中的版本。
go.mod中一般常出现三个关键字:
require : 项目需要的依赖包及版本
exclude : 排除某些包的特别版本
replace : 取代当前项目中的某些依赖包。
如下所示:
module Micro-Go/ch13/13.2
require (
github.com/gogo/protobuf v1.3.2
github.com/golang/protobuf v1.5.2
)
exclude my/utils v1.2.11
replace cart/goods v1.4.5 => cart/allgoods v1.4.5
二、go.mod文件相关的命令
命令行输入: go help mod
download download modules to local cache
edit edit go.mod from tools or scripts
graph print module requirement graph
init initialize new module in current directory
tidy add missing and remove unused modules
vendor make vendored copy of dependencies
verify verify dependencies have expected content
why explain why packages or modules are needed
常见命令: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
go mod download : 下载模块到本地缓存,具体可以通过命令go env
查看,其中环境变量GOCACHE
就是缓存的地址,如果该文件夹的内容太大,可以通过命令go clean -cache
go mod edit : 从工具或脚本中编辑go.mod
文件
go mod graph : 打印模块需求图
go mod init : 在当前目录下初始化新的模块
go mod tidy : 添加缺失的模块以及移除无用的模块
go mod verify :验证依赖项是否达到预期的目的
go mod why : 解释为什么需要包或模块
三、常见go.mod管理的工程创建流程
前提: Go编译器版本(>=1.11) 、环境变量 set GO111MODULE=on
1、执行go mod init
命令
创建一个空文件夹,进入该文件夹命令行,执行命令go mod init
,在当前文件夹下生成go.mod
文件。(如果有已存在的项目,可以直接删除已存在go.mod
)
2、如果你工程中存在一些不能确定版本的包,那么生成的go.mod文件可能就不完整,则继续执行下面的命令:
2.1 执行go mod tidy
命令
它会添加缺失的模块以及移除不需要的模块。执行后会生成go.sum
文件(模块下载条目)。输入go mod tidy -v
可以将执行的信息,即删除和添加的包打印到命令行;
2.2 执行go mod verify
命令
执行命令go mod verify来检查当前模块的依赖是否全部下载下来,是否下载下来被修改过。如果所有的模块都没有被修改过,那么执行这条命令之后,会打印all modules verified。
2.3 执行go mod vendor
命令
执行命令go mod vendor
生成vendor文件夹
,该文件夹下将会放置你go.mod
文件描述的依赖包,文件夹下同时还有一个文件modules.txt
,它是你整个工程的所有模块。在执行这条命令之前,如果你工程之前有vendor目录,应该先进行删除。
同理go mod vendor -v会将添加到vendor中的模块打印出来。