Golang报错no required module provides package排查与解决
Go运行Gin项目提示找不到依赖包问题
问题复现
新建项目文件夹,在其中创建main.go文件,编写基于Gin框架的测试代码:
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080") }
依次执行以下命令初始化模块、拉取依赖:
go mod init gingo mod tidy
执行完成后目录下正常生成go.mod、go.sum文件,文件内容无异常。
执行go run main.go启动项目时出现报错:
main.go:6:2: no required module provides package github.com/gin-gonic/gin; to add it: go get github.com/gin-gonic/gin
按照报错提示执行go get github.com/gin-gonic/gin后问题仍未解决,怀疑当前目录的go.mod配置未被加载,先后尝试设置GO111MODULE="auto"、GO111MODULE="on"均未生效。
对应环境的go env配置信息如下:
GO111MODULE="auto" GOARCH="amd64" GOBIN="" GOCACHE="/home/xxx/.cache/go-build" GOENV="/home/xxx/.config/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/home/xxx/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/xxx/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GOVCS="" GOVERSION="go1.18.3" GCCGO="gccgo" GOAMD64="v1" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/home/xxx/files/Programming/go-playground/gin/go.mod" GOWORK="/home/xxx/files/Programming/go-playground/go.work" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build3669122409=/tmp/go-build -gno-record-gcc-switches"
解决方案
排查go env配置可见GOWORK字段指向了上层目录的go.work文件,说明当前项目位于Go工作区目录下。新建的模块未通过go work use命令添加到工作区配置中,才会出现依赖无法识别的问题。
在工作区根目录(即go.work所在的/home/xxx/files/Programming/go-playground/路径下)执行命令,将当前gin模块加入工作区配置:
go work use ./gin
执行完成后再运行go run main.go即可正常启动服务。
内容的提问来源于stack exchange,提问作者zyros
相关产品推荐
相关产品推荐

