为什么fmt.Println不能在Google应用引擎中运行

时间:2014-06-11 03:25:15

标签: google-app-engine go

我使用谷歌应用引擎和golang构建了一个简单的网络应用程序。在下面的代码中,我使用fmt.Println两次打印出一些用于调试目的。我没有运行应用程序的问题。一切正常,除了终端上没有打印出来。

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    q := datastore.NewQuery("Post").Ancestor(goblogKey(c)).Order("-CreatedOn").Limit(10)

    //posts := make([]entity.Post, 0, 10)
    var posts []entity.Post

    if _, err := q.GetAll(c, &posts); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    fmt.Println(string(len(posts)) + "...........")

    postList := []dto.Post{}

    for _, val := range posts {
        newpost := dto.Post{
            Post:     val,
            BodyHTML: template.HTML(val.Body),
        }

        fmt.Println(val.Title)

        postList = append(postList, newpost)
    }

    page := dto.PageData{Title: "Home", Posts: postList}
    templates.ExecuteTemplate(w, "index", page)
}

2 个答案:

答案 0 :(得分:10)

在真正的发源环境中,您可以输出任何输出到标准输出 Appengine上下文让您远离日志(您可以在登录管理员页面和控制台操场上查看)。

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    c.Debugf("The message: %s", "foo")
    ...

了解详情:https://developers.google.com/appengine/docs/go/reference#Context

答案 1 :(得分:0)

标准i / o或错误用于与devleoper使用的app服务器通信。在生产系统中,没有使用标准i / o的意义。在生产系统中,日志用于跟踪结果。在app引擎中存在一些限制。像fmt,socket等。

在远程服务器上测试或运行程序时,最好使用日志。