Google AppEngine DataStore Read&写(Golang)

时间:2015-08-02 16:16:15

标签: google-app-engine go google-cloud-datastore

我正在使用http包来创建一个简单的Golang服务器来传递/ add目录中的一些查询字符串参数。该应用程序然后 1.)解析查询字符串参数, 2.)将它们放入结构中 3.)将它们写入数据存储区。

这似乎工作得很好......

然而,当我在结构中输入“Bob”时,我尝试进行查询以搜索“Bob”“Smith”时,它不返回任何成员,如运行所示: LEN(storeVals) 结果得到0。

我希望有人能熟悉Google的AppEngine DataStore来帮助我。

非常感谢!

编辑:我查看了类似的问题:Google App Engine Datastore - Testing Queries fails并修改了我的代码。即使第一次执行写操作,然后再执行读操作(10s),我仍然没有返回成员!

package main

import (
    "fmt"
    "net/http"
    "time"
    "net/url"

    "appengine"
    "appengine/datastore"
)

type storeVal struct {
    firsN   string
    lastN   string
    Date    time.Time
}

func write(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    m, _ := url.ParseQuery(r.URL.RawQuery)

    e1 := storeVal{
        firstN:     m["firstN"][0],
        lastN:      m["lastN"][0],
        Date:       time.Now(),
    }

    key := datastore.NewIncompleteKey(c, "storeVal", nil)
    _, err := datastore.Put(c, key, &e1)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
}

func read(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    m, _ := url.ParseQuery(r.URL.RawQuery)

    q := datastore.NewQuery("storeVal").
        Filter("firstN =", m["firstN"][0]).
        Filter("lastN =", m["lastN"][0]).
        Order("-Date")
    var storeVals []storeVal
    _, err := q.GetAll(c, &storeVals)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    fmt.Fprintf(w, "--%d--", len(storeVals))  //Always returns --0--!!
}

func init() {
    http.HandleFunc("/", read)
    http.HandleFunc("/add", write)
    http.ListenAndServe(":8080", nil)
}

0 个答案:

没有答案