Go easyjson使用及反射原理

 更新时间:2022年04月18日 14:55:13   作者:周伯通  
这篇文章主要介绍了Go easyjson使用技巧,详细介绍了go自带JSON库使用的反射原理,性能相对较差,可以使用easyjson代替,需要的朋友可以参考下

如果使用go语言自带的json库,使用的是反射,而go语言中反射性能较低。easyjson就是一个比较好的替代方案。

esayjson安装(https://gitcode.net/mirrors/mailru/easyjson?utm_source=csdn_github_accelerator)

go get -u github.com/mailru/easyjson
go install  github.com/mailru/easyjson/easyjsonorgo
go build -o easyjson github.com/mailru/easyjson/easyjson(这里默认在当前目录生成easyjson二进制可执行文件)

安装easyjson

# for Go < 1.17
go get -u github.com/mailru/easyjson/...

# for Go >= 1.17
go get github.com/mailru/easyjson && go install github.com/mailru/easyjson/...@latest

说下我的环境:win10,go1.18,如下图

安装完毕后,GOPATH里bin下就有easyjson.exe。

使用go env 查看如我的gopath为:C:\Users\77293\go

使用easyjson

go mod init demo

比如我的当前工作目录demo下初始化mod,创建一个文件夹model,在model下新建student.go文件:

定义结构体:

记得在需要使用easyjson的结构体上加上//model:json 标注。 此处model是我的包路径名即为model,代码如下:

package model
import "time"
//model:json
type School struct {
    Name string `json:"name"`
    Addr string `json:"addr"`
}
type Student struct {
    Id       int       `json:"id"`
    Name     string    `json:"s_name"`
    School   School    `json:"s_chool"`
    Birthday time.Time `json:"birthday"`

可以进入结构体包model下执行:

easyjson -all student.go

运行完后,该文件夹中有一个student_easyjson.go,该文件中就是easyjson帮我们生成的MarshalJSON和UnmarshalJSON方法. 

使用示例

package main
 
import (
    "demo/model"
    "fmt"
    "time"
)
func main() {
    s := model.Student{
        Id:   11,
        Name: "qq",
        School: model.School{
            Name: "CUMT",
            Addr: "xz",
        },
        Birthday: time.Now(),
    }
    bt, err := s.MarshalJSON() // MarshalJSON
    fmt.Println(string(bt), err)
    json := `{"id":1,"s_name":"克莱尔","s_chool":{"name":"中南","addr":"wuhan"},"birthday":"2003-08-04T20:58:07.9894603+08:00"}`
    str := model.Student{}
    str.UnmarshalJSON([]byte(json)) // UnmarshalJSON
    fmt.Println(str)
}

运行结果:

{"id":11,"s_name":"qq","s_chool":{"name":"CUMT","addr":"xz"},"birthday":"2022-04-17T20:48:07.9274949+08:00"} <nil>
{1 克莱尔 {中南 wuhan} 2003-08-04 20:58:07.9894603 +0800 CST

小结:go自带JSON库使用的反射原理,性能相对较差,可以使用easyjson代替。

到此这篇关于Go easyjson使用技巧的文章就介绍到这了,更多相关Go easyjson使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 学习GO编程必备知识汇总

    学习GO编程必备知识汇总

    这篇文章主要介绍了学习GO编程必备知识汇总的相关资料,需要的朋友可以参考下
    2016-07-07
  • Golang IOT中的数据序列化与解析过程

    Golang IOT中的数据序列化与解析过程

    这篇文章主要介绍了Golang IOT中的数据序列化与解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • golang post请求常用的几种方式小结

    golang post请求常用的几种方式小结

    这篇文章主要介绍了golang post请求常用的几种方式小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go并发之RWMutex的源码解析详解

    Go并发之RWMutex的源码解析详解

    RWMutex是一个支持并行读串行写的读写锁。RWMutex具有写操作优先的特点,写操作发生时,仅允许正在执行的读操作执行,后续的读操作都会被阻塞。本文就来从源码解析一下RWMutex的使用
    2023-03-03
  • Go语言如何生成PDF文件实例探究

    Go语言如何生成PDF文件实例探究

    这篇文章主要为大家介绍了Go语言生成PDF文件的实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 浅析Golang开发中goroutine的正确使用姿势

    浅析Golang开发中goroutine的正确使用姿势

    很多初级的Gopher在学习了goroutine之后,在项目中其实使用率不高,所以这篇文章小编主要来带大家深入了解一下goroutine的常见使用方法,希望对大家有所帮助
    2024-03-03
  • Go语言struct类型介绍

    Go语言struct类型介绍

    这篇文章主要介绍了Go语言struct类型介绍,本文讲解了struct的2种声明方式,struct的匿名字段等内容,需要的朋友可以参考下
    2015-01-01
  • golang jwt+token验证的实现

    golang jwt+token验证的实现

    这篇文章主要介绍了golang jwt+token验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 优雅使用GoFrame共享变量Context示例详解

    优雅使用GoFrame共享变量Context示例详解

    这篇文章主要为大家介绍了优雅使用GoFrame共享变量Context示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • MacOS中 VSCode 安装 GO 插件失败问题的快速解决方法

    MacOS中 VSCode 安装 GO 插件失败问题的快速解决方法

    这篇文章主要介绍了MacOS中 VSCode 安装 GO 插件失败问题的快速解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论