前言
刚接触golang不久,有些环境无法融会贯通,现在针对开发过程中遇到的问题做个排查记录
问题背景
开发环境区分不同网段,同一个程序引入到另一个环境后,对应的包无法下载
问题现象
程序导入另一个环境后,初始化操作就是下载包:执行go mod tidy后,出现下面错误
或者出现以下错误
查看go.mod后,发现很多报红,无法下载对应的版本包,查阅相关资料,对go.mod有了一个深入了解
go.mod文件定义module路径以及列出其他需要在build时引入的模块的特定的版本。
module go_start
go 1.18
require (
github.com/fsnotify/fsnotify v1.6.0
github.com/gin-gonic/gin v1.8.1
github.com/go-sql-driver/mysql v1.6.0
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/shirou/gopsutil v2.21.11+incompatible
github.com/spf13/viper v1.14.0
github.com/valyala/fasthttp v1.40.0
github.com/vkcom/engine-go v0.0.0-20181122144534-e2cc962e10cc
github.com/wxnacy/wgo v1.0.4
go.uber.org/zap v1.23.0
gopkg.in/yaml.v3 v3.0.1
)
如上go.mod文件:声明go_start路径作为module的根目录;go的运行版本为1.18;同时也声明了module依赖特定版本的github.com/fsnotify/fsnotify v1.6.0和github.com/gin-gonic/gin v1.8.1等等
问题解决
根据报错,尝试举措如下
1、强制开启GO111MODULE
go env -w GO111MODULE=on
GO111MODULE开启和关闭对Go的包无论是导入,还是下载使用,都有着非常大的区别,老版本可以说就没有包管理器,无法实现类似npm install或者pip install -r requirements这样的自动导入所有需要的包。并且go项目也被限制在了go的PATH文件夹中,导入也需要写较长的路径,十分不方便。GO111MODULE的出现就是用来解决上述所有的问题。
2、切换代理
查询了一下当前环境的GOPROXY地址:
go env GOPROXY
> http://另一个网段网络:端口/仓库地址/,direct
执行命令:
go env -w GOPROXY=http://另一个网段网络:端口/仓库地址/,direct
重新执行命令go mod tidy,完美通过!
问题总结
切换另一个环境时,原来环境变量的GOPROXY被删除了,导致引入的程序无法下载对应的包,所以重新设置GOPROXY即可