内容简介:golang gencode 序列化/反序列化数据
andyleap/gencode 是一个快速的且体积很小的序列化库,速度是标准库10x倍。
首先定义数据结构:test.schema
struct Person {
Name string
Age uint8
}
然后通过gencode 命令行生成test.schema.gen.go:
$ gencode go -schema test.schema -package main
下面是结合bolt 来存储数据:
package main
import (
"fmt"
"log"
"time"
"github.com/boltdb/bolt"
)
func main() {
db, err := bolt.Open("my.db", 0600, &bolt.Options{Timeout: 1 * time.Second})
if err != nil {
log.Fatal(err)
}
defer db.Close()
db.Update(func(tx *bolt.Tx) error {
_, err := tx.CreateBucketIfNotExists([]byte("person"))
if err != nil {
return err
}
return nil
})
person := Person{
Name: "testname",
Age: 20,
}
db.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("person"))
buf, _ := person.Marshal(nil)
fmt.Println(buf, string(buf))
b.Put([]byte(person.Name), buf)
fmt.Printf("Gencode encoded size: %v\n", len(buf))
return nil
})
db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("person"))
if err := b.ForEach(func(k, v []byte) error {
fmt.Printf("%s is %s.\n", k, v)
p := Person{}
p.Unmarshal(v)
fmt.Println(p)
return nil
}); err != nil {
return err
}
return nil
})
}
输出:
[8 116 101 115 116 110 97 109 101 20]testname
Gencode encoded size: 10
testname istestname.
{testname 20}
因为 gencode 不会写入字段的名字,所以体积很小,正因为如此,用gencode 序列化和反序列化数据时应该注意,数据结构不能动态改变。
项目地址 andyleap/gencode 1
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
电脑报(上下册)
电脑报社 / 西南师范大学出版社 / 2006-12-01 / 45.00元
全套上、下两册,浓缩2006年电脑报精华文章。附录包含70余篇简明IT应用指南,覆盖软件、硬盘、数码、网络四大领域。配赠权威实用的2006-2007中国计算机年鉴DVD光盘,近1.4GB海量信息与资源超值奉献。8大正版超值软件,涵盖系统维护、系统安全、办公应用、多媒体娱乐等四大领域。微软、腾讯、友立等知名厂商,新年献礼。提供2006-2007全系列硬件、数码产品资讯,兼具知识性与资料性。官方网站全......一起来看看 《电脑报(上下册)》 这本书的介绍吧!