Google App Engine 模块主机名:不是 App Engine 上下文

zde*_*bra 1 google-app-engine go google-cloud-platform

我正在尝试在 App Engine 上发现其他已部署的服务。像这篇文章这样的建议。

这是我的代码的样子:

import (
    "fmt"
    "net/http"

    "google.golang.org/appengine"
)

func ServiceHostname(serviceName string, r *http.Request) (string, error) {
    ctx := appengine.NewContext(r)
    hostname, err := appengine.ModuleHostname(ctx, serviceName, "", "")
    if err != nil {
        return "", fmt.Errorf("unable to find service %s: %v", serviceName, err)
    }
    return hostname, nil
}
Run Code Online (Sandbox Code Playgroud)

我在常规 http 处理程序中调用此函数。我得到的错误是:not an App Engine context

我的代码和引用的文章之间的唯一区别在于 app engine go 版本。我go111在他使用go1运行时的地方使用新的。

你知道如何克服这个问题吗?

zde*_*bra 5

我找到了解决方案。您需要appengine.Main()在主文件中调用,即使在新的go111运行时中不需要这样做。

所以有问题的代码保持不变,你需要像在go1.9运行时一样注册你的处理程序。

func main() {
    http.HandleFunc("/serveurl", handle)
    appengine.Main()
}
Run Code Online (Sandbox Code Playgroud)

资料来源:https : //groups.google.com/d/msg/google-appengine-go/ZcASFMWJKpE/7iwGirNiBgAJ

编写主包中也提到了这一点:

  • 或者,如果您的服务正在使用该google.golang.org/appengine软件包,请包括对 的调用appengine.Main()