一次报错的 彻底明白 go的GOROOT ,GOPATH 以及go mod (cannot find module providing package bufio)

今天看c盘满了,想着删掉一些文件(五六年的破电脑了,low的一批)

事情起因

之前的一个项目的后台是用go写的,之前是用的GOROOT的,今天看到了go mod ,心想这是什么东东哦。(刚接触go语言不久,可能有点out了),在找了几篇像模像样的博客之后,惊奇的发现有大大这样描述 : go.mod 就如同java的pom.xml一样,卧槽,卧槽,这个有点叼,在我的理解中java的maven做依赖管理,其实我更想说go.mod 就如同前端的package.json包管理工具一样,这样就可以在协作开发中,保持一致的开发环境了。所以 搞一波go 的module吧。

一个报错

cannot find module providing package bufio 

然后 在goland 把项目的setting 的GOPATH 去掉

在这里插入图片描述
大概就是这个样子

接着把以前的项目搞过来,期间要改造下 其实很简单 go版本 在1.12的 ,项目目录下执行,go mod init 模块名, 操作过后目录下会出现go.mod 文件, 这个文件就是类似pom.xml 或者 package.json。 接着运行下项目,会发现goland 正在下载 包, 这些包默认会在你电脑的GOPATH下的pkg/mod/cache/download 下。 下载过程中有可能会出现下载失败问题, 例如: golang.org/x/** 这些包,其实处理这个问题也很简单,只需要给goland配置个代理就行了 我的这这样的

在这里插入图片描述
如果一些顺利你将会碰到 这个报错

 build command-line-arguments: cannot find module  这里后面一堆本地路径

这是因为在go module下 你源码中 impot …/ 这样的引入形式不支持了, 应该改成 impot 模块名/ 。 这样就ok了

终于到了 报正在错的时候了

接下来 我的项目中报了这个错

cannot find module providing package bufio

原因: 这个报错是因为把 goroot 的src给干掉了(原因是想看看src下的源码包是怎么下载的)
分析: 这也就清楚的知道 goROOT 下的src 文件 是 go安装时默认的包了, 比如fmt 这样的包, 所以 也就是说 go get这样的命令下载的包都会在gopath 下 (其实大佬们都知道)

如果 你报了这个错 也有可能你没安装go

发布了38 篇原创文章 · 获赞 14 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/sinat_23156865/article/details/100655475