一尘不染

如何从GCP中的另一个Go Cloud函数调用Go Cloud函数

go

目标: 我想使用HTTP触发器重用两个Go函数中的许多Go函数。

我尝试过的方法和重现此问题的步骤:

  1. 在GCP中,创建一个新的Go 1.11 Cloud Function,HTTP触发器
  2. 命名: MyReusableHelloWorld
  3. 在中function.go,粘贴以下内容:
    package Potatoes

    import (   
        "net/http"
    )


    // Potatoes return potatoes
    func Potatoes(http.ResponseWriter, *http.Request) {

    }
  1. 在中go.mod,粘贴以下内容:module example.com/foo
  2. 在要执行的函数中,粘贴以下代码: Potatoes
  3. 单击部署。有用。
  4. 在GCP中创建另一个Go无服务器功能
  5. 在功能上。去,粘贴这个:
    // Package p contains an HTTP Cloud Function.
    package p

    import (
        "encoding/json"
        "fmt"
        "html"
        "net/http"
        "example.com/foo/Potatoes"
    )

    // HelloWorld prints the JSON encoded "message" field in the body
    // of the request or "Hello, World!" if there isn't one.
    func HelloWorld(w http.ResponseWriter, r *http.Request) {
        var d struct {
            Message string `json:"message"`
        }
        if err := json.NewDecoder(r.Body).Decode(&d); err != nil {
            fmt.Fprint(w, "error here!")
            return
        }
        if d.Message == "" {
            fmt.Fprint(w, "oh boy Hello World!")
            return
        }
        fmt.Fprint(w, html.EscapeString(d.Message))
    }
  1. 在中go.mod,粘贴以下内容:module example.com/foo
  2. 在要执行的函数中,粘贴以下代码: HelloWorld
  3. 单击部署。 没用 您有错误: unknown import path "example.com/foo/Potatoes": cannot find module providing package example.com/foo/Potatoes

我还尝试了各种组合来导入模块/软件包。我尝试过没有example.com/部分。

另一个较小的问题: 我想重用的功能可能都在同一个文件中,并且实际上不需要任何触发器,但是似乎没有触发器是不可能的。

我无法实现目标的相关问题和文档:

  1. https://github.com/golang/go/wiki/Modules,部分go.mod

阅读 241

收藏
2020-07-02

共1个答案

一尘不染

您不能从另一个调用云功能,因为每个功能都独立地位于其自己的容器中。

因此,如果要使用无法从程序包管理器下载的依赖项来部署功能,则需要像此处一样将代码放在一起然后使用CLI进行部署

2020-07-02