概述
基本功能:
依赖管理 : 管理所需依赖
依赖包版本控制 : 每个依赖都可以定义 version
对应的包管理平台 : 进行包的下载
可以私有化部署 : 包管理工具可以私有化部署
代码包是否可以复用 : 包管理工具必须可以复用
构建,测试,打包 : 类似于 go build go test go package
发布上线 : 发布上线
gopath管理
项目必须构建在 GOPATH/src 下面
go get 的包默认是下载到 GOPATH/ src 下面, 但是不能维持多版本号,只能指向当前一种版本。
最大问题无法控制版本号,GOPATH 存储的永远只有一个版本的数据。
代码开发必须在go path src目录下,不然,就有问题。
govendor
一个配置文件解决包依赖的问题
所有依赖包全部下载到项目 vendor 下, 每个项目都有一份,拉取项目非常慢
如何开启Go module
**modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。 就是替换了最原始的使用 gopath管理包的逻辑 **
1.11和1.12版本
将以下 GO111MODULE=on
GOPROXY=https://goproxy.io 加到环境变量中就生效了
1.13版本之后
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
GO111MODULE
GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
当modules功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module
go mod 命令
命令 说明
download download modules to local cache(下载依赖包)
edit edit go.mod from tools or scripts(编辑go.mod)
graph print module requirement graph (打印模块依赖图)
verify initialize new module in current directory(在当前目录初始化mod)
tidy add missing and remove unused modules(拉取缺少的模块,移除不用的模块)
vendor make vendored copy of dependencies(将依赖复制到vendor下)
verify verify dependencies have expected content (验证依赖是否正确)
why explain why packages or modules are needed(解释为什么需要依赖)
go.mod 文件内容解读
module 语句指定包的名字(路径)
require 语句指定的依赖项模块
replace 语句可以替换依赖项模块
exclude 语句可以忽略依赖项模块
运行机制,当运行 go run 时, 会自动下载依赖 到 mod中去
go module 安装 package 的原則是先拉最新的 release tag,若无tag则拉最新的commit
使用replace替换无法直接获取的package。modules 可以通过在 go.mod 文件中使用 replace 指令替换成github上对应的库,比如:
replace (
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
)
操作
拉取最新的版本(优先择取 tag) @latest会使用稳定的 tag进行引入
go get golang.org/x/text@latest
拉取 master 分支的最新 commit
go get golang.org/x/text@master
拉取 tag 为 v0.3.2 的 commit
go get golang.org/x/text@v0.3.2
拉取 hash 为 342b231 的 commit,最终会被转换为 v0.3.2:
go get golang.org/x/text@342b2e
指定版本拉取,拉取v3版本
go get github.com/smartwalle/alipay/v3
go get -u
mod基本操作
初始化一个moudle,模块名为你项目名
go mod init 模块名
下载modules到本地cache
目前所有模块版本数据均缓存在 $GOPATH/pkg/mod和 $GOPATH/pkg/sum 下
go mod download
删除错误或者不使用的modules
go mod tidy
查找依赖
go mod why
清理moudle 缓存
go clean -modcache
查看可下载版本
go list -m -versions github.com/gogf/gf