我正在尝试编写自己的httpcache;我怀疑我做错了,但这是我的方法:
我的回答如下:
response := make(map[string]interface{})
w.WriteHeader(http.StatusOK)
response["status"] = true
response["token"] = someTokenString
response["data"] = someStructSlice // etc
json.NewEncoder(w).Encode(response)
我现在的计划是使用https://github.com/peterbourgon/diskv,其中我设置密钥等于URL路径(必要时+用户名/令牌)。然后将值等于响应数据。
问题是我不确定应该如何存储这些数据。 dickv期望数据类型为[]byte
,而我的响应数据类型为map[string]interface {}
..
在我开始试图弄清楚如何转换它之前,我想我会问这里的专家我是否使用了正确的方法。如果我是,有没有一种简单的方法将response
存储在dickv值(类型为[]byte
)?
好吧,你已经编码为JSON,它输出为[]字节。你可以存储它。此外,您还可以获得额外的好处,即无需在每次缓存命中时进行解码/编码,只需直接从缓存中提供数据:
if cached, ok := getFromCache(id); ok {
response.Write(cached)
return
}
response["status"] = true
response["token"] = someTokenString
response["data"] = someStructSlice // etc
payload, err := json.Marshall(response)
saveToCache(payload, id)
response.Write(payload)
您还可以使用内置的gob
package,它更有效,但如果数据模型发生变化则更容易破坏。