go引入自建包编译报错:main.go:5:2: package src/xxx is not in std

【问题描述】

在go语言的build编辑过程中:go build main.go

报了下面的错误信息:

main.go:5:2: package src/gocode/testproject01/unit2/demo17/test is not in std (D:\Program Files\Go\src\src\gocode\testproject01\unit2\demo17\test)

下面是编辑的main.go文件内容:

顺便说一下,我已经在系统的环境变量中设置了GOPATH的变量和正确的路径值:

奇怪的是,只要编译main.go文件,就会报上面的错误信息。

 

【原因分析】

再怎么分析也不太知道是什么原因导致的,因为GOPATH 和GOROOT的路径都是设置正确的,百度了解了一下,如果环境变量和引用的路径配置都是正确的,build还是报这个错误,很可能是因为go的环境变量本身的配置出现了问题。使用go env命令,查看一下go本身的环境变量配置如下:

 根据go的配置信息发现,问题可能出现在GO111MODULE的开启和关闭上。

1)当GO111MODULE=空时,它将清除GO111MODULE环境变量的设置,这将导致Go工具认为你的项目不会使用Go Modules,因此它会尝试在GOPATH中查找包,但无法查找到你在项目中的非标注库的包;

2)当GO111MODULE=off时,这意味着你禁用了Go Modules,并且Go工具会尝试在GOPATH中查找包。

 

【解决方案】

修改GO111MODULE配置:go env -w GO111MODULE=off

再次编译或运行main.go文件,就不会报错了。

 备注:GO111MODULE是go mudules的功能开关,简要说明:

GO111MODULE=off,go命令将不会支持mudules功能,寻找依赖包的方式会沿用旧版本的那种通过vendor目录或者GOPATH模式来查找;

GO111MODULE=on,go命令会使用mudules功能,而完全不会去GOPATH目录下查找。

 

参考的文章链接:https://blog.csdn.net/qq_50750196/article/details/134261664

posted @ 2024-05-07 15:08  勇敢-的心  阅读(418)  评论(0编辑  收藏  举报