简介:go mod是go语言的依赖管理工具
基本概念:
go.mod: 配置文件/根目录
go.sum: 校验文件
goproxy:代理/缓存库
$GOPATH/pkg/mod:本地安装目录(可以保存相同包的不同版本)
帮助文档:https://github.com/golang/go/wiki/Modules
go安装:
官网:https://golang.org/dl/
工具下载:https://golang.google.cn/dl/
代理仓库:
go proxy存在的意义:https://goproxy.cn/
1. 方便:不再需要任何 VSC 工具来下载依赖项,因为依赖项是通过 HTTP 获取的( Go proxy 在后台使用 HTTP)
2. 快速:Go proxy 通过 HTTP 独立提供源代码(.zip 存档),比起使用vsc工具下载量小
3. 不丢失:代理会缓存(代码仓存在域名/版本消失的可能)
4. 不被篡改:不能被覆盖
5. 远端缓存(和vendor目录相比)
go mod 命令的使用
go help module-get
go mod init mpdule:初始化go mod, 生成go.mod文件,后可接参数指定 module 名
go run main.go:运行源码
go mod tidy #代码引入,gomod没引入时,往go.mod添加缺少的包,且删除无用的包,没有go.sum会自动生成
go mod download -x:手动触发下载依赖包到本地cache(默认为$GOPATH/pkg/mod目录)
go get golang.org/x/crypto/sha3@master #从VCS(版本控制系统)拉取源码
go clean -modcache #清除编译文件
go mod graph: 打印项目的模块依赖结构
go list -m -json all:以 json 的方式打印依赖详情
go env -w ... #在${HOME}/.config/go/env
go mod edit --module=github.com/islishude/gomodtest
配置文件:
go.mod
第一行:包名(module语句)
第二行:项目使用的 go 版本
第三行:项目所需的直接依赖包及其版本
require语句指定的依赖项模块
replace语句可以替换依赖项模块
exclude语句可以忽略依赖项模块
go.sum:记录zip和go.mod的SHA-256
<module> <version>[/go.mod] <hash>
无go.mod文件:
gopath:$GOPATH/src/ 包含自研源码和依赖源码
go vendor 特性,需要将使用 go get 命令获取到的第三方目录 剪切或复制 到 src/my-program-name/vendor/ 目录下。
有go.mod文件时,默认启用 modules特性