go build报错,提示错误can‘t load package: package xxx is not in GOROOT (D:\basic_tool\Go\src\xxx)

背景介绍

这个go build的错误困扰了我很长时间,可能最大原因还是一个小白,在折腾了大半天加一晚上,度娘上各种找原因,也没有找到合适的解决办法,最终还是在大佬的指导下成功解决,所以记录一下。

配置环境介绍

  • 目的:在idea下go build Go项目为二进制文件,然后将其放到服务器上运行
  • window下已成功配置Go编译所需的环境变量,配置信息如下图所示
    window下Go环境变量配置
  • IDEA中已成功配置Go环境,已下载Go插件,且GROOT、GOPATH、GOPROXY配置正确,如下图所示
    IDEA中GOROOT配置
    IDEAGOPATH配置
    IDEA Go Modules设置
    IDEA中go build设置
  • 设置go env -w GO111MODULE=on,及go mod为开启模式
  • 在IDEA命令行进行go build前设置了相关的变量,具体为在要编译的项目内执行SET CGO_ENABLED=0,SET GOOS=linux,SET GOARCH=amd64(注意此处SET必须为大写否则不生效)
  • 在上述步骤设置完成后,在IDEA命令行cd 进入到要编译的项目所在目录,执行go build 项目名/文件名.go,或者在所要编译的项目的上级目录执行go build 项目名,都无法成功,会出现类似的报错
    总之,一句话就是go build的时候总会提示无法在GOROOT的src目录下加载不到要编译的包

问题原因及解决办法

我们都知道GO管理包的方式有两种,传统的GOPATH模式和目前流行的GOMOD,主要是我一开始对这两种方式不是很了解,只知道自己要编译的项目是在go mod下形式下编译的,也不知道深层次的原因是什么,网上有很多关于两者的区别和详细的介绍,本文在此不做赘述。
由于我的项目是放置于GOPATH的src目录下,所以在编译时还会默认是以GOPATH的方式来管理包,所以会报错,这时只需要将要编译的项目放置到非GOPATH的路径下即可编译成功,即在我的环境中不要放置在E:/GoProjects路径下。
编译过程如下:

  • 进入要编译的项目的目录下,假设要编译的目录为E:/myProjects/test,要编译test目录,其中test目录下有三个.go文件,执行以下命令进入编译目录
cd e:/myProjects/test
  • 然后设置编译环境
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
  • 然后直接执行go build,则会生成文件名为test的二进制文件
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值