goland编辑器编译的时候报错package xxx is not in GOROOT的原因排查

发布时间 2023-09-27 11:58:35作者: 第一夫人

先介绍下,我的目录部署情况

1、GOROOT=C:\Program Files\Go(我的golang环境装在c盘的)

2、GOPATH=E:\Go(项目目录我放在E盘的)

3、GO111MODULE=auto(默认值,没有改过)

4、GOVERSION=go1.20.6(我的golang版本)

5、项目结构,遵循官方推荐的方式

E:\Go

——bin

——pkg

——src

 6、本次需要打包的项目是src/tcp/chatroom/server,直接选中server目录,右键有个run命令,执行即可

 7、哦豁,报错了

 8、打包配置如下

 9、编辑器的设置,就只有默认的GOROOT和GOPATH

 10、错误分析,这个错误从字面意思看,就是我要打的包,编辑器从GOROOT目录下面去查找了,但是我的包并没有在GOROOT里面,而是在GOPATH下面,那肯定找不到咯,好吧,意思明白了,但是要怎么解决呢?

11、上网查资料吧,肯定有人遇到过这个问题,好一顿查,有说包名的问题,有说GO111MODULE的问题,遗憾的是,我都试过了,还是没能解决我的问题

12、继续冷静分析问题,检查代码和目录,我的项目里面用到一个第三方的包(go-sql-driver的mysql),引入包,我使用的go mod方式

 13、打开go.mod文件,乍看没啥问题,其实问题就出在module server这里

 14、回想我的操作步骤

15、执行完步骤14,就生成了那个go.mod文件

16、我习惯在go mod init 后面加上项目的目录,如果这个项目直接在src目录下第一层,那是没有问题的,之前就是这么干的,都是正常的,但是这次目录结构不一样,目录为:src/tcp/chatroom/server,所以执行go mod init server这个就有问题了

17、正确的应该是执行,go mod init 后面不带任何东西,系统会自动根据当前目录去匹配的,生成的go.mod文件就是这样了,和之前的比较,发现这里的名字是不一样的

 18、重新执行步骤6的打包操作,哇塞,终于成功了!

 总结:go mod init的时候,注意2点

1、进入到指定的项目目录下,直接执行go mod init

2、执行go mod init 项目目录(从GOPATH/src开始,例如我的就是:tcp/chatroom/server)

两种方式都可以,但是要用对哦!