go版本在1.13之前,一直以来依赖管理令人诟病,现在官方也有了明确的方向,所以 对go mod 做一个大致的了解
go版本为1.13及以上
官方文档
https://github.com/golang/go/wiki/Modules
go module介绍
具体的请往下看
开启go module
go在1.13及之后的版本默认是auto,但开不开启MODULE,要看根目录下有没有go.mod文件
也可以设置为 on(全部开启)/off(全部不开启)
Windows:
Linux/Mac:
然后输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | >go env set GO111MODULE=on set GOARCH=amd64 set GOBIN= set GOCACHE=C:\Users\Administrator\AppData\Local\go-build set GOENV=C:\Users\Administrator\AppData\Roaming\go\env set GOEXE=.exe set GOFLAGS= set GOHOSTARCH=amd64 set GOHOSTOS=windows set GONOPROXY= set GONOSUMDB= set GOOS=windows set GOPATH=D:\goproject set GOPRIVATE= set GOPROXY=https://goproxy.cn/ set GOROOT=D:\gzrjaz\Go set GOSUMDB=sum.golang.org set GOTMPDIR= set GOTOOLDIR=D:\gzrjaz\Go\pkg\tool\windows_amd64 set GCCGO=gccgo set AR=ar set CC=gcc set CXX=g++ set CGO_ENABLED=1 set GOMOD=NUL set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build199922342=/tmp/go-build -gno-record-gcc-switches |
查看
GO PROXY 代理
设置代理
初始化
项目第一次使用
进入你的项目文件夹
cd xxx/xxx/demo/
初始化 MODULE
go mod init demo (demo为项目名)
然后在项目根目录就会出现一个 go.mod 文件
注意,此时的 go.mod 文件只标识了项目名和go的版本,这是正常的,因为只进行了初始化
检测依赖
go mod tidy
该命令会检测该文件夹目录下所有引入的依赖,并把依赖写入 go.mod 文件,写入后就会发现 go.mod 文件有所变动
例如:此时还没有下载依赖
1 2 3 4 5 6 7 8 9 10 | module ledo/library go 1.13 require ( github.com/bilibili/kratos v0.3.3 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/jinzhu/gorm v1.9.12 github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | module demo go 1.13 require ( github.com/bilibili/kratos v0.3.3 github.com/gogo/protobuf v1.3.0 github.com/golang/protobuf v1.3.5 github.com/google/go-cmp v0.3.1 // indirect github.com/google/wire v0.4.0 github.com/jinzhu/gorm v1.9.12 github.com/tealeg/xlsx v1.0.5 golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 // indirect golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8 // indirect google.golang.org/appengine v1.6.2 // indirect google.golang.org/genproto v0.0.0-20200312145019-da6875a35672 google.golang.org/grpc v1.27.0 gopkg.in/yaml.v2 v2.2.7 // indirect ledo/library v0.0.0-incompatible ) |
下载依赖
我们需要把依赖下载至本地,但不是使用 go get
go mod download
注:如果GOPROXY没有设置好或设置的镜像不好导致速度太慢,有可能就下载不动
下面这一步可忽略:
下面这一步在项目文件夹中生成vendor(放项目依赖的所有包)文件夹后,在把项目文件夹放到没有依赖包的新环境中时,也可以直接运行
执行完成后会将依赖全部下载到 GOPATH 下,会在根目录下生成 go.sum 文件, 该文件是依赖的详细依赖,
但我们的项目文件夹并没有放到 GOPATH 下,那下载至到 GOPATH 下的依赖是没有用的,也就找不到这些包,就没法用导入依赖
go mod vendor 执行此命令,会将刚才下载到 GOPATH 下的依赖转移到该项目根目录下的 vendor(自动新建) 文件夹下
此时我们就可以使用这些依赖了
Goland 设置开启 GO MODULE
Goland IDE默认是关闭该功能的,我们需要手动打开。都打上勾,因为我是在系统变量中设置了

更新依赖
是指项目引入了新的包依赖,更新依赖从检测依赖执行即可,不需要初始化,即
go mod tidy -v
go mod verify
go mod download
go mod vendor -v(如果未生成vendor,则不需要执行此命令)
新增依赖
直接在项目中 import 这个包,之后更新依赖即可
在团队开发项目时需要使用 GOMODULE
团队开发时, 在项目管理中,如过使用
团队其他人把项目
GOMODULE常用命令
go mod init # 初始化go.mod
go mod tidy # 更新依赖文件
go mod download # 下载依赖文件
go mod vendor # 将依赖转移至本地的vendor文件
go mod edit # 手动修改依赖文件
go mod graph # 打印依赖图
go mod verify # 校验依赖
依赖库管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | govendor依赖管理 govendor命令 // 创建vendor文件夹和vendor.json文件 govendor init // 从$GOPATH中添加依赖包,会加到vendor.json govendor add // 从vendo文件夹删除依赖 govendor remove // 从$GOPATH升级依赖包 govendor update // 列出已经存在的依赖包 govendor list // 从远端库增加新的,或者更新vendor文件中的依赖包 govendor fetch // 本地存在vendor.json时候拉取依赖包,匹配所记录的版本 govendor sync // 列出本地丢失的,过期的和修改的 package govendor status // 类似go get,但是会把依赖包拷贝到vendor目录 govendor get govendor依赖包类型 +local:本地包,及项目自身的包组织 l +external:外部包,即被$GOPATH管理,但不在vendor目录下 e +vendor:已被govendor管理,即在vendor目录下 v +std:标准库中的包 s +unused:未使用的包,即包在vendor目录下,但项目并没有使用 u +missing:代码引用了依赖包,但该包并没有找到 m +program:主程序包,意味着可以编译为执行文件 p +outside:外部包和缺失的包 +all:所有的包 // 默认模式,当前目录在GOPATH/src目录之外而且包含go.mod文件才会启用 export GO111MODULE=auto // GOPATH模式,在vendor目录下和GOPATH目录中查找依赖包 export GO111MODULE=off // module-aware模式,使用modules功能,而不会访问GOPATH,依赖包放在GOPATH/pkg/mod目录下 export GO111MODULE=on export GOPROXY='<https://goproxy.io>' // 在当前目录下生成一个go.mod文件 go mod init // 添加缺失的模块以及移除不需要的模块 go mod tidy -v // 检查当前模块的依赖是否全部下载下来,是否下载下来被修改过 go mod verify // 生成vendor文件夹,放置go.mod文件描述的依赖包 go mod vendor -v // 获取依赖库 go mod download |
1 2 3 4 5 6 7 | // 翻墙官方依赖库 export GOPROXY='https://goproxy.io' // 不翻墙微软依赖库 1、export GOPROXY=https://goproxy.cn/ 2、export GOPROXY="https://goproxy.cn" 3、export GOPROXY=https://mirrors.aliyun.com/goproxy/ 4、export GOPROXY="https://athens.azurefd.net" |