goland编辑器编译的时候报错package xxx is not in GOROOT的原因排查
先介绍下,我的目录部署情况
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)
两种方式都可以,但是要用对哦!