megajson 高性能的json序列化、反序列化工具
2024-10-19 03:39:59
go 自带的 encoding/json 支持json的序列化和反序列化, 然而它是基于反射的,有下面几个缺点:
- 反射是性能差的代名词, 并且无法在编译时进行优化。
- 只有 Public 字段才可以,反射库只能反射出暴露出来的字段,这意味着你无法对private 字段进行JSON转化。
https://github.com/benbjohnson/megajson 针对这个问题做了优化,它是一个代码生成工具, 通过使用 go/parser 和 go/ast 包去产生你自己类型实体的自定义的 序列号和反序列化代码。 这里的序列号和反序列化知道你的数据类型,所以不会用反射,继而解决了上面问题。
通过测试, Go 1.2 下, Megajson 比 encoding/json 包有2倍的性能提升。
安装方法:
$ go get github.com/benbjohnson/megajson
使用:
直接运行 megajson 命令,它会产生你需要的序列化和反序列化文件:
$ megajson mypkg/my_file.go
这样会产生2个文件:
mypkg/my_file_encoder.go
mypkg/my_file_decoder.go
它的使用比较简单,如下:
err := NewMyStructEncoder(writer).Encode(val)
err := NewMyStructDecoder(reader).Decode(&val)
最新文章
- SpringMVC学习--异常处理器
- DOM(六)事件类型
- NeHe OpenGL教程 第十六课:雾
- [swustoj 243] 又是一年CET46
- java 基础学习
- jemalloc源码结构分析(一):内存申请处理过程
- Drupal commerce 性能优化
- CentOS下yum使用代理的设置
- php学习的第8天
- RAC节点两边存储名字不一致导致的故障及相关延伸
- Robot Framework--ride使用说明2
- reset Cisco 2960 password
- C:\Users\Administrator\.IntelliJIdea2017.3\system\tomcat\Unnamed_08_upload\work\Catalina\localhost\ROOT这个错误是找不到temp文件
- mysql创建表时,设置timestamp DEFAULT NULL报错1067 - Invalid default value for 'updated_at'
- 部署kubernetes1.8.3高可用集群
- 代码调试--自定义一个简单的debug函数
- 设计模式之Strategy(策略)(转)
- English Voice of <;<; Count on me >;>;
- debug的粗略使用(求大神们补充、指教,小渣马上改)
- JSONHelp json解析成类,类解析成string