package xxx is not in GOROOT——go mod踩坑实录

package xxx is not in GOROOT——go mod踩坑实录,第1张

最近在学习go语言包管理工具时遇到的问题。

问题的描述是在go文件中引入的包在GOROOT中不存在。那这里就牵扯到一个问题,你的包管理工具使用的是哪一种?

GOPATH 或者 Go mod

早期go版本的包管理工具是使用GOPATH来进行包的管理,然而在Go1.11版本之后,Go module开始用于替代GOPATH的包管理方式。Go module 是 Go1.11 版本发布的依赖管理方案,从 Go1.14 版本开始推荐在生产环境使用,于Go1.16版本默认开启。

这两种方式在go日常的开发中都得以保留。那怎么知道我们使用的是哪种包管理方式呢?

1.在终端(cmd)中输入

$ go env

会显示出与go相关的环境变量,比如我的

GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/yinwenjie/Library/Caches/go-build"
GOENV="/Users/yinwenjie/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/yinwenjie/Documents/project/goproject/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/yinwenjie/Documents/project/goproject"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.16.9"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/yinwenjie/Documents/project/goModProject/packageTest/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/96/tk6h_bnd0ydd93xb0ntzn7s80000gn/T/go-build2298977271=/tmp/go-build -gno-record-gcc-switches -fno-common"

 2.查看GO111MODULE变量的值

该变量的值有三种,分别为"on","off"和"auto"

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

GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。

GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:

当前目录在GOPATH/src之外且该目录包含go.mod文件

当前文件在包含go.mod文件的目录下面。

3.查看当前文件所处的位置

由于我是将go mod的配置打开了的,因此在默认情况下是会使用go mod的管理方式。而打开的情况下很重要的一点,当前文件不能在GOPATH的src路径之下。这样go会默认使用GOPATH来进行包的管理,go mod 相关的配置就不起作用了,进而就无法进行go mod模块化的管理。

解决方式:

很简单,将相关联的go文件移除GOPATH的src路径下即可,go文件便能正常编译执行。

参考:Go go.mod入门 - 知乎

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/990871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存