【问题标题】:Go Gae NewContextGo Gae NewContext
【发布时间】:2015-04-11 04:42:39
【问题描述】:

我在 GAE 上使用 Go。我的任务之一是发送电子邮件。我正在成功使用this 文档进行测试。

但是,如果我不想要请求处理程序怎么办:

func confirm(w http.ResponseWriter, r *http.Request) {
        c := appengine.NewContext(r)
                    ...

而是通过本地函数发送电子邮件:

func confirm() {
...

在 Go 中有什么方法可以用 GAE 做到这一点吗?我认为我正在寻找的是一种调用方式:

c := appengine.NewContext(r)

但是没有请求处理程序,或者以任何可能的方式绕过它(我可能无法阅读)

我在想一个变通办法是在我的应用程序和我的应用程序之间创建一个http request - 但哇,真丑!

resp, err := http.Get("http://localhost:8080/sendMail?to=...")

注意:在尝试了这个之后——我得到了丑陋的解决方法: http.DefaultTransport 和 http.DefaultClient 在 App Engine 中不可用。见https://cloud.google.com/appengine/docs/go/urlfetch/

因此,这种解决方法实际上不是 urlfetch 中的解决方法,这是 GAE 再次使用 http.GET 的方式...需要 c := appengine.NewContext(r)

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

    您需要一个 appengine.Context 来与外部服务交互,包括电子邮件和 urlfetch。您必须将 Context 实例传递给您的 confirm 函数。

    【讨论】:

    • 我担心这就是答案。除了 *http.Request 之外,还有什么方法可以传递它吗?还是某种类型的假 *http.Request?如果可能的话,我试图不使用请求处理程序。谢谢。
    • 我不确定你的目标是什么,但是如果没有请求首先启动你的实例,应用引擎根本不会运行任何代码,所以即使你可以这样做,也没有办法让代码执行。您要解决的具体要求是什么?
    • 噢噢噢噢+1。我不知道,但它回答了我的问题!非常感谢您的跟进
    猜你喜欢
    • 2012-04-26
    • 2011-12-13
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多