本呆瓜也是刚入门go,简直是一个go文件报一个错,错错还不一样。刚开始碰到这个问题也尝试了博客中的很多办法,比如go mod init,关闭module配置:go env -w GO111MODULE=off,打开module配置:go env -w GO111MODULE=on,等等,可能碰巧解决了也不知道为什么。接下来呆瓜会给你分析一下报错的原因,一劳永逸。
首先我们可以查看一下go的环境设置,在终端输入go env,会看到以下信息:
主要是看set GOPATH=F:\go_project这一行,我设置的gopath路径在F盘下的go_project文件下,而我当前运行的代码文件也在这个路径下,那么这个时候就会产生一个冲突。
主要问题出在GO111MODULE的设置上,早期的go主要是用gopath管理,在go1.11之后,采用了go.module的管理方案,也就是前面说的指令go mod init xx,这个指令用于管理当前路径下的源包,那么这个时候就会出现一个问题,如果我们将GO111MODULE设置为on,而刚好我们需要运行的源码文件在gopath下,那么系统会使用哪一种包的管理方式呢,这就是冲突,也就是报错的根本原因。既然找到了原因那么也就会有解决办法。
解决方案一:将源码文件移出到gopath路径之外,这里我的gopath如上图所示为F:\go_project,然后将GO111MODULE设置为on,并结合go mod init xx和go mod tidy,利用go.module管理包。
go env -w GO111MODULE=on
go mod init mod
go mod tidy
解决方案二:不需要将源码文件移出到gopath路径之外,直接关闭GO111MODULE即可,即使用gopath管理包。推荐用第二种。
go env -w GO111MODULE=off
这样就可以愉快的 hello GO!