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

huangapple go评论89阅读模式
英文:

Go: how to convert struct to []byte?

问题

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

我应该如何将结构体转换为[]byte类型以便存储?

例如:

type Link struct {
    Files []string
}
英文:

I'm trying to use "appengine/memcache" to store data in the cache,
memcache.Item's Value field is []byte

how do I convert a struct to []byte for storing it ?

for example:

type Link struct {
    Files []string
}

答案1

得分: 10

请参考memcache.Codec类型,它可以用于转换memcache项目。appengine/memcache包已经准备好了两个编解码器,memcache.Gob和memcache.JSON。您可以使用这些编解码器来存储和检索缓存中的项目,例如对于一个gob编码的项目,可以像这样使用:

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

See the memcache.Codec type, this can be used to convert memcache items. The appengine/memcache package has two codecs already prepared, memcache.Gob and memcache.JSON. You use these codecs instead of the direct call to store and retrieve items from the cache, for example like this for a gob encoded item:

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

答案2

得分: 3

encoding/gob包可能是您最好的选择。

您也可以使用encoding/json包。

如果您使用encoding/json,您可以从除Go之外的其他语言中读取值。

如果您使用encoding/gob,您将获得更快的速度。

英文:

The encoding/gob package is probably your best option.

You could also use the encoding/json package.

If you use encoding/json you get the benefit of being able to read the values from languages other than Go.

If you use encoding/gob you get more speed.

答案3

得分: 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

英文:

You can use 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

huangapple
  • 本文由 发表于 2013年4月21日 06:36:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/16125886.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定