原汁原味的报错信息如下: 报错原因是没有使用 go modules 进行模块管理,无法记录和解析对其他模块的依赖性。只需要在项目根目录执行命令 go mod init 即可。
需要注意的是,使用 go modules 需要设置 go 的环境变量 GO111MODULE 的值。
GO111MODULE 取值有三种:off,on 和 auto(默认值)。
GO111MODULE=off,无模块支持,从 $GOPATH 和 vendor 文件夹寻找依赖包。GO111MODULE=on,有模块支持,go 会忽略 $GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。GO111MODULE=auto,go 命令行将会根据当前目录来决定是否启用 modules 功能。可分为两种情形: 项目在 $GOPATH/src 之外且项目根目录有 go.mod 文件时,开启模块支持;项目在 $GOPATH/src 内部,即使存在 go.mod 文件,也不提供模块支持。当模块功能启用时,依赖包的存放位置变更为 $GOPATH/pkg,允许同一个 package 多个版本并存,且多个项目可以共享缓存的 module。
个人习惯是,在执行项目前,先执行下面两条命令:
$ go get -u $ go mod tidygo get -u 命令会利用网络来更新已有代码包及其依赖包。默认情况下,只会下载本地不存在的代码包,而不会更新已有的代码包。 go mod tidy 命令会拉取缺少的模块,移除不用的模块。
参考文章
go mod 使用
golang版本管理工具GO111MODULE
Go 模块解惑:到处都是 GO111MODULE ,这到底什么?
go get