在Go Runtime中,我使用方法c.Infof来记录消息,但是无法编译时出现以下错误 c.Infof undefined(类型context.Context没有字段或方法Infof) 。 错误清楚地表明从 c:= appengine.NewContext(r) 返回的应用引擎上下文的类型为 context.Context 并且它没有方法 c.Infof 。但与此相反,https://godoc.org/google.golang.org/appengine/log中的文档表明此方法存在。另一点要注意,该方法存在于" appengine"返回的上下文中。 (import" appengine")包,这似乎不存在于新包 google.golang.org/appengine 返回的上下文中,在 " google.golang.org/appengine"返回的类型为context.Context的新上下文中 c.Infof 等效; ?
答案 0 :(得分:3)
包文档中的示例不正确。
使用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 Classic包中复制的,但未更新以使用新功能。我建议将此报告给App Engine团队。