英文:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论