go mod使用

简介

最近工作中大量接触go语言,同时也在使用go开发一些项目。之前主要是写python,在接触go后发现go的包管理并不像python或者java那么方便,在go1.11之前是go path这种方式对于国内的用户经常发现包下载失败,go1.11之后引入了go mod的概念,并且目前也越来越完善,下面简单记录下go mod的日常使用
module是一个相关Go包的集合,它是源代码更替和版本控制的单元。模块由源文件形成的go.mod文件的根目录定义,包含go.mod文件的目录也被称为模块根。moudles取代旧的的基于GOPATH方法来指定在工程中使用哪些源文件或导入包。模块路径是导入包的路径前缀,go.mod文件定义模块路径,并且列出了在项目构建过程中使用的特定版本

开启go mod和配置国内镜像

  • GO111MODULE 默认值auto,当在go path目录下该值为off,也就是使用go path方式,所以这里我们手动设置一下为on
  • GOPROXY 配置国内镜像,便于国内用户下载包
1
2
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

Go mod 的使用

在开启Go mod 模式下,当新建项目时需要初始化项目

1
go mod init project_deme

项目中会生成go.mod 文件

1
2
3
4
5
6
7
8
9
$ cat go.mod
module guard
go 1.16
require (
github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect
github.com/mozilla/libaudit-go v0.0.0-20190422145841-6f76c4a77947
)

go.mod 文件中用到的关键字有三个

  • require:引用哪些包
  • replace:替换一些包的下载和引用路径
  • exclude:不下载和引用哪些包

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(解释为什么需要依赖)

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器