gotiny 是一个高效的golang序列化库。
gotiny是一个注重效率的go语言序列化库。gotiny通过预先生成编码机和减少使用reflect库等方式来提高效率,几乎和生成代码的序列化库有同样高的速度。
package main
import (
"fmt"
"github.com/niubaoshu/gotiny"
)
func main() {
src1, src2 := "hello", []byte(" world!")
ret1, ret2 := "", []byte{}
gotiny.Unmarshal(gotiny.Marshal(&src1, &src2), &ret1, &ret2)
fmt.Println(ret1 + string(ret2)) // print "hello world!"
}
type a *a
var b a
b = &b
$ go get -u github.com/niubaoshu/gotiny
bool类型占用一位,真值编码为1,假值编码为0。当第一次遇到bool类型时会申请一个字节,将值编入最低位,第二次遇到时编入次低位,第九次遇到bool值时再申请一个字节编入最低位,以此类推。
float32和float64采用gob中对浮点类型的编码方式。
字符串类型先将字符串长度强转为uint64类型编码,然后将字符串字节数组自身原样编码。
指针类型判断是否为nil,如果是nil,编入一个bool类型的false值后结束,如果不为nil,编入一个bool类型true值,之后将指针解引用,按解引用后的类型编码。
先将长度强转为一个uint64后采用uint64的编码方式编入,然后将每一个元素安装自身的类型编码。
同上,先编入长度,然后编入一个健,后面跟健对应的值,在编入一个健,接着是值,以此类推。
将结构体的所有成员按其类型编码,无论是否导出,非导出的字段也会编码。结构体会严格还原。
MIT