「appengine/memcache」を使用してデータをキャッシュに保存しようとしています。memcache.Item の値フィールドは []byte です
構造体を []byte に変換して格納するにはどうすればよいですか?
例えば:
type Link struct {
Files []string
}
「appengine/memcache」を使用してデータをキャッシュに保存しようとしています。memcache.Item の値フィールドは []byte です
構造体を []byte に変換して格納するにはどうすればよいですか?
例えば:
type Link struct {
Files []string
}
memcache.Codec タイプを参照してください。これは、memcache アイテムの変換に使用できます。appengine/memcache パッケージには、memcache.Gob と memcache.JSON の 2 つのコーデックが既に用意されています。これらのコーデックを直接呼び出しの代わりに使用して、キャッシュからアイテムを保存および取得します。たとえば、gob エンコードされたアイテムの場合は次のようになります。
item := &memcache.Item{
Key: myCacheKey,
Object: &myLinkVar,
}
err := memcache.Gob.Set(context, item)
使用できますgob#Encoder.Encode
:
package main
import (
"bytes"
"encoding/gob"
"fmt"
)
type link struct {
Files []string
}
func main() {
s := link{
[]string{"south", "north"},
}
b := new(bytes.Buffer)
gob.NewEncoder(b).Encode(s)
// "\x1d\xff\x81\x03\x01\x01\x04link\x01\xff\x82\x00\x01\x01\x01\x05Files\x01\xff\x84\x00\x00\x00\x16\xff\x83\x02\x01\x01\b[]string\x01\xff\x84\x00\x01\f\x00\x00\x11\xff\x82\x01\x02\x05south\x05north\x00"
fmt.Printf("%q\n", b)
}