脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Go easyjson使用及反射原理

Go easyjson使用及反射原理

2022-09-24 14:22周伯通 Golang

这篇文章主要介绍了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,如下图

Go easyjson使用及反射原理

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

使用go env 查看如我的gopath为:C:Users77293go

Go easyjson使用及反射原理

 

使用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方法. 

Go easyjson使用及反射原理

 

使用示例

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使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:http://www.zhoubotong.site/post/37.html

延伸 · 阅读

精彩推荐
  • Golangsublime3+Golang+代码补全的实现

    sublime3+Golang+代码补全的实现

    本文主要介绍了sublime3+Golang+代码补全的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    jason_cuijiahui9462022-08-28
  • Golang在Mac中搭建go语言开发环境的操作步骤

    在Mac中搭建go语言开发环境的操作步骤

    go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发。下面介绍在Mac中golang的开发环境配置。有需要的可以参考借鉴。...

    daisy2422020-05-01
  • GolangUbuntu安装Go语言运行环境

    Ubuntu安装Go语言运行环境

    由于最近偏爱Ubuntu,在加上作为一门开源语言,在Linux上从源代码开始搭建环境更让人觉得有趣味性。让我们直接先从Go语言的环境搭建开始 ...

    脚本之家3872020-04-26
  • GolangGo语言基础go doc命令用法及示例详解

    Go语言基础go doc命令用法及示例详解

    这篇文章主要为大家介绍了Go语言基础go doc命令的用法及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步...

    枫少文4602021-12-08
  • GolangGo语言中并发的工作原理

    Go语言中并发的工作原理

    本文详细讲解了Go语言中并发的工作原理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    奋斗的大橙子8902022-07-16
  • Golang基于gin的golang web开发之认证利器jwt

    基于gin的golang web开发之认证利器jwt

    这篇文章主要介绍了基于gin的golang web开发之认证利器jwt,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    陈宏博7422021-02-19
  • Golang详解golang 模板(template)的常用基本语法

    详解golang 模板(template)的常用基本语法

    这篇文章主要介绍了详解golang 模板(template)的常用基本语法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    碎炎12692020-05-27
  • Golanggolang 中 channel 的详细使用、使用注意事项及死锁问题解析

    golang 中 channel 的详细使用、使用注意事项及死锁问题解析

    这篇文章主要介绍了golang 中 channel 的详细使用、使用注意事项及死锁分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需...

    九卷技术录9142022-09-07