我开发了一个go服务并将其部署在GAE上。在开发此应用程序时,我在工作机中包括了使用命令运行所需的go模块-
go get -u <module-name>
我可以使用以下命令包含其他必需的go模块-
adtech-adlib-web> go mod init
它创建了一个带有消息的go.mod文件-
go: creating new go.mod: module github.com/nytm/adtech-adlib-web
然后,我执行以下命令以将供应商文件夹中的所需模块下载为-
adtech-adlib-web> go mod vendor
现在,我想在我的功能分支中提交此go代码,在该分支中代码通过仓库中的.drone.io工具自动部署。但是,我的构建仅因错误而失败:
cannot find package "backend" in any of:
/drone/src/github.com/nytm/adtech-adlib-web/vendor/backend (vendor tree)
/usr/local/go/src/backend (from $GOROOT)
/drone/src/backend (from $GOPATH)
在我的.drone.yml文件部分中创建问题的是-
backend-test:
image: jprobinson/golang-gcloud-sdk:1.11
environment:
- GOPATH=/drone
- PATH=/bin:/usr/bin:/usr/local/go/bin:/usr/local/go_appengine
commands:
- go test -v ./backend/...
when:
event: [push, pull_request]
我不知道如何解决此问题?如果go mod供应商可以在这种情况下提供帮助,那么如何使用它以及我必须在哪个文件夹级别执行此操作?请说明所有执行步骤。
答案 0 :(得分:0)
根据此错误消息,您似乎正在以GOPATH模式构建(禁用了模块)。
cannot find package "backend" in any of:
/drone/src/github.com/nytm/adtech-adlib-web/vendor/backend (vendor tree)
/usr/local/go/src/backend (from $GOROOT)
/drone/src/backend (from $GOPATH) <--- building in GOPATH mode
尝试在您的环境中设置GO111MODULE=on
。由于您使用的是供应商目录,因此您可能还需要设置-mod=vendor
以确保从供应商目录而不是模块缓存(和网络)中加载软件包。
未设置GO111MODULE
或将auto
设置为GOPATH
时,仅在LocalSocket
外部启动构建时才启用模块感知模式。这将在go1.13中更改:如果任何父目录中有go.mod文件,则模块也会启用。
答案 1 :(得分:0)
我忘了在main.go中以我的golang服务文件夹的完整github路径开头-
导入( ....
后端“ github.com/org_name/repo_name/backend”
......... )