在Golang中,将结构体序列化和反序列化为字符串的最佳方法是什么(完整性和性能)?
例如,如果我有这样的结构:
struct Session {
Properties map[string]interface{}
Permissions []int64
}
我想把它存到Redis上取回来。我试过保存,int和string,都可以,但是如何存储结构体对象呢?
conn := redisConnectors.Get()
// set example
_, err := conn.Do(`SETEX`, `uid_key`, EXPIRE_SEC, user_id)
_, err = conn.Do(`SETEX`, `email_key`, EXPIRE_SEC, login_email)
// get example
user_id, err := redis.Int64(conn.Do(`GET`, `uid_key`))
login_email, err := redis.String(conn.Do(`GET`, `email_key`))
2条答案
按热度按时间flmtquvp1#
使用gob和base64可以解决此问题,例如:
当你需要序列化自定义的struct或type(例如
Session
struct)时,只需添加下面几行:如果您希望将other serialization format(2020)或此benchmark(2022)用于动态结构
iyr7buue2#
结构的序列化通常使用
encoding
包。但是,这只适用于公共字段。如果您还需要序列化私有字段,可以使用see this answer作为替代。有几种编码选择(二进制、文本、json as in this example for a struct、xml等),例如
cupcake/rdb
项目使用encoding/binary
实现RedisRDB file format(内存存储的二进制表示)的解析和编码,另一个例子是guregu/rediscache
,Redis中用于缓存数据的小型库。