私自身のhttpcacheを書き込もうとしています。私はそれを間違った方法をやっている疑いがあるが、これは私のアプローチです:httpリクエストをキャッシュするためのdiskv valueフィールド(期待される[]バイト)のmap [string] interface {}データを格納
私の応答は次のようになります。
response := make(map[string]interface{})
w.WriteHeader(http.StatusOK)
response["status"] = true
response["token"] = someTokenString
response["data"] = someStructSlice // etc
json.NewEncoder(w).Encode(response)
私の計画は今、私はURLパスと同じキーに設定どこhttps://github.com/peterbourgon/diskvを使用することです( +必要に応じてユーザー名/トークン)。そして、値を応答データと同じにします。
問題このデータをどのように保存するべきかわかりません。 dickvはデータタイプが[]byte
であると予想していますが、私の応答データはタイプmap[string]interface {}
です。
どのように変換するかを理解しようとする前に、正しいアプローチ。そしてもし私がいれば、response
をdickv値(タイプ[]byte
)に保存する簡単な方法はありますか?
まあ、あなたは既にJSONにエンコードしています。これは '[] byte'として出力されます。あなたはそれを保存することができます。さらに、すべてのキャッシュヒットでデコード/エンコードする必要がなく、キャッシュからまっすぐにデータを提供するという利点があります。また、組み込みの '' gob'パッケージ(https://golang.org/pkg/encoding/gob/)を使うこともできます。 – Adrian
'respond'は' encodedJson、err:= json.Marshal(response) 'を使ってエンコードする必要がありますか? 'w.Write(encodedJson)'? – fisker
修正します。その後、キャッシュに同じペイロードを書き込むことができます。 – Adrian