1 回答
TA贡献1880条经验 获得超4个赞
根据我的评论,我的意思是,在这一行中,value最有可能是类型[]byte(或[]uint8- 这是同一件事)
value, found := ristrettoCache.Get(key)
JSON 编码 a[]byte将隐式地 base64 输出 - 因为 JSON 是基于文本的。
json.NewEncoder(w).Encode(value) // <- value is of type []byte
检查您发布的 base64 ( https://play.golang.org/p/NAVS4qRfDM2 ) 底层二进制字节已经用 JSON 编码 - 所以不需要额外json.Encode的。
只需在处理程序中输出原始字节 - 并将内容类型设置为application/json:
func getTokenInfo(w http.ResponseWriter, r *http.Request){
vars := mux.Vars(r)
key := vars["chain"]+vars["symbol"]
value, found := ristrettoCache.Get(key)
if !found {
return
}
// json.NewEncoder(w).Encode(value) // not this
w.Header().Set("Content-Type", "application/json")
if bs, ok := value.([]byte); ok {
_, err := w.Write(bs) //raw bytes (already encoded in JSON)
// check 'err'
} else {
// error unexpected type behind interface{}
}
}
添加回答
举报