通过GET参数传递的密钥获取实体

时间:2013-01-05 10:43:36

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

我有

http://localhost:8080/?key=ahFkZXZ-ZGV2LWVkdW5hdGlvbnIOCxIIVXNlckluZm8YLAw

我想询问如何:

  1. 解码并将“密钥”转换为*datastore.Key
  2. 并用它来获得一个实体。
  3. 感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

首先:您应该考虑您需要哪些包。由于您尝试从GET读取URL值,因此您需要net/http中的函数。 特别是:FormValue(key string)会返回GETPOST个参数。

第二:现在打开appengine/datastore文档,找到执行以下操作的函数:

现在这很简单:

func home(w http.Response, r *http.Request) {
    c := appengine.NewContext(r)

    // Get the key from the URL
    keyURL := r.FormValue("key")

    // Decode the key
    key, err := datastore.DecodeKey(keyURL)
    if err != nil { // Couldn't decode the key
        // Do some error handling
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // Get the key and load it into "data"
    var data Data
    err = datastore.Get(c, key, data)
    if err != nil { // Couldn't find the entity
        // Do some error handling
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
}