在Go Runtime中,我使用了c.Infof方法来记录消息,但是由于以下错误而无法编译
c.Infof未定义(类型context.Context没有字段或方法Infof)
该错误清楚地表明,从 c:= appengine.NewContext(r)返回的应用引擎上下文类型为 context.Context ,并且它没有 c.Infof 方法。但是与此相反,https://godoc.org/google.golang.org/appengine/log中的文档表明此方法存在。还要注意的一点是,该方法存在于“appengine”(导入“appengine”)包返回的上下文中,而似乎不存在于新包 google.golang.org/appengine 返回的上下文中,这是什么? c.Infof 是否等效于类型为context的新Context。由包“google.golang.org/appengine” 返回的上下文?

最佳答案

软件包文档中的示例不正确。

使用log包函数来写入App Engine日志。这是更正的示例:

c := appengine.NewContext(r)
query := &log.Query{
    AppLogs:  true,
    Versions: []string{"1"},
}

for results := query.Run(c); ; {
    record, err := results.Next()
    if err == log.Done {
       log.Infof(c, "Done processing results")
       break
    }
    if err != nil {
        log.Errorf(c, "Failed to retrieve next log: %v", err)
        break
    }
    log.Infof(c, "Saw record %v", record)
}

程序包文档中的示例是从App Engine经典程序包复制而来的,但未进行更新以使用新功能。我建议将此情况报告给App Engine团队。

关于google-app-engine - c.Infof未定义(类型context.Context没有字段或方法Infof)google.golang.org/appengine/log错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29168848/

10-15 09:24