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)

最新文章

  1. SpringMVC学习--异常处理器
  2. DOM(六)事件类型
  3. NeHe OpenGL教程 第十六课:雾
  4. [swustoj 243] 又是一年CET46
  5. java 基础学习
  6. jemalloc源码结构分析(一):内存申请处理过程
  7. Drupal commerce 性能优化
  8. CentOS下yum使用代理的设置
  9. php学习的第8天
  10. RAC节点两边存储名字不一致导致的故障及相关延伸
  11. Robot Framework--ride使用说明2
  12. reset Cisco 2960 password
  13. C:\Users\Administrator\.IntelliJIdea2017.3\system\tomcat\Unnamed_08_upload\work\Catalina\localhost\ROOT这个错误是找不到temp文件
  14. mysql创建表时,设置timestamp DEFAULT NULL报错1067 - Invalid default value for 'updated_at'
  15. 部署kubernetes1.8.3高可用集群
  16. 代码调试--自定义一个简单的debug函数
  17. 设计模式之Strategy(策略)(转)
  18. English Voice of << Count on me >>
  19. debug的粗略使用(求大神们补充、指教,小渣马上改)
  20. JSONHelp json解析成类,类解析成string

热门文章

  1. jzoj1792
  2. python unittest框架理解与总结(二)
  3. 总结day2 ---- while循环的简单使用, 格式化输出.运算符.以及编码的应用
  4. 利用Python爬取电影网站
  5. L02-RHEL6.5环境中安装JDK1.8
  6. Linux Shell编程、变量、控制语句
  7. Python数据结构之序列及其操作
  8. 基础概念——何为GNU与GCC
  9. 3.1)DFM-塑胶件设计总章
  10. redux进阶 --- 中间件和异步操作