Golang Cloud功能和本地依赖

时间:2019-02-10 22:31:38

标签: go google-cloud-platform google-cloud-functions

我正在尝试使用deploy命令部署到google cloud,我的代码使用github url引用本地包。使用gcloud deploy命令进行部署时,我无法理解。所以在这个例子中。我的终结点软件包使用完整的git url引用本地软件包的价格。我在这里想念什么?

package endpoints

import (
    "encoding/json"
    "fmt"
    "github.com/piscean/pricing/price"
    "net/http"
)

func LawnPricing(w http.ResponseWriter, r *http.Request) {

    m, err := price.Pricing()

    c, err := json.Marshal(m)

    w.Write(c)
    r.Body.Close()
}
  

错误:(gcloud.functions.deploy)OperationError:代码= 3,消息=构建失败:/tmp/sgb/gopath/src/serverlessapp/vendor/endpoints/pricing.go:6:2:找不到软件包“ github.com/piscean/pricing/price”中的任何一个:           /tmp/sgb/gopath/src/serverlessapp/vendor/github.com/piscean/pricing/price(供应商树)           /go/src/github.com/piscean/pricing/price(来自$ GOROOT)           /tmp/sgb/gopath/src/github.com/piscean/pricing/price(来自$ GOPATH)   /tmp/sgb/gopath/src/serverlessapp/vendor/endpoints/zipcode.go:5:2:在以下任意位置均找不到软件包“ github.com/piscean/pricing/zip”:           /tmp/sgb/gopath/src/serverlessapp/vendor/github.com/piscean/pricing/zip(供应商树)           /go/src/github.com/piscean/pricing/zip(来自$ GOROOT)           /tmp/sgb/gopath/src/github.com/piscean/pricing/zip(来自$ GOPATH)

2 个答案:

答案 0 :(得分:2)

为此,您应该使用依赖性软件包管理工具称为 dep

使用以下命令安装dep:

go get -u github.com/golang/dep/cmd/dep

这将在 GOBIN 目录中创建dep的二进制文件。导航到主软件包所在的目录并执行以下命令:

对于Windows: %GOBIN%\dep.exe init

对于Linux: $GOBIN\dep init

这将创建 Gopkg.toml Gopkg.lock 文件以及供应商文件夹,以解决您的问题。

参考https://golang.github.io/dep/docs/introduction.html

答案 1 :(得分:1)

云函数是谷歌在函数部署过程中为我们提供的托管环境。在设置环境时,google 提供了所有系统依赖项,但任何外部依赖项都应由函数本身处理。

在解析外部依赖时,它会查找供应商目录、GOROOT 和 GOPATH 以查找要导入的包。如果在这些位置中的任何一个都找不到包,则会出现此错误。

解决方案

  • 将您的软件包作为供应商依赖项手动复制到那里。
  • 或为您的包创建一个 go 模块并在部署云功能时提供 go.mod 文件。这样 go 在构建函数之前就知道在哪里可以找到包。

参考 - https://github.com/GoogleCloudPlatform/golang-samples/issues/1600