我正在使用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)
}