Go:如何将结构体转换为 []byte?

6

我正在尝试使用“appengine/memcache”将数据存储在缓存中,memcache.Item的Value字段是[]byte

如何将struct转换为[]byte以进行存储?

例如:

type Link struct {
    Files []string
}
3个回答

10

查看memcache.Codec类型,它可以用于转换memcache项。appengine/memcache包已经准备了两个编解码器,memcache.Gob和memcache.JSON。您可以使用这些编解码器来代替直接调用存储和检索缓存中的项,例如对于gob编码的项:

    item := &memcache.Item{
        Key:    myCacheKey,
        Object: &myLinkVar,
    }
    err := memcache.Gob.Set(context, item)

在这个例子中,context是什么? - Jordan Feldstein

3
encoding/gob包可能是您最好的选择。
您也可以使用encoding/json包。
如果您使用encoding/json,则可以读取来自Go以外的语言的值。
如果您使用encoding/gob,则会获得更快的速度。

0
你可以使用 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)
}

https://golang.org/pkg/encoding/gob#Encoder.Encode


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接