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运行时的地方使用新的。
你知道如何克服这个问题吗?
我找到了解决方案。您需要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()。