easyjson免运行时反射的json化
最后更新于:2022-04-02 02:39:34
[TOC]
> [github](https://github.com/mailru/easyjson)
## 概述
* 在不使用反射的情况下将JSON结构封送/从JSON封送
* 在性能测试中,easyjson的性能要比标准encoding/json包好4-5倍,而其他JSON编码包要好2-3倍
* easyjson为我们实现了json.Marshaller接口,因此将调用这些函数,而不是基于反射的默认函数
## 安装
```
go get -u github.com/mailru/easyjson/...
```
简单demo
```
//easyjson:json
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
easyjson -all [/path/][file.go]
```
## 接口
```
Usage of easyjson:
-all
generate marshaler/unmarshalers for all structs in a file
-build_tags string
build tags to add to generated file
-leave_temps
do not delete temporary files
-no_std_marshalers
don't generate MarshalJSON/UnmarshalJSON funcs
-noformat
do not run 'gofmt -w' on output file
-omit_empty
omit empty fields by default
-output_filename string
specify the filename of the output
-pkg
process the whole package instead of just the given file
-snake_case
use snake_case names instead of CamelCase by default
-lower_camel_case
use lowerCamelCase instead of CamelCase by default
-stubs
only generate stubs for marshaler/unmarshaler funcs
-disallow_unknown_fields
return error if some unknown field in json appeared
```
### simple demo
```
├── demo
│ └── a.go
├── demo333.iml
├── go.mod
└── main.go
```
```
//a.go
//easyjson:json
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
//执行 easyjson -all ./demo
//main.go
u := demo.User{Name: "yan1", Age: 12}
user1, err := u.MarshalJSON()
if err != nil {
println("error")
}
println("user = ", string(user1))
//json:=`{"id":11,"name":"yan","age":11}`
user2 := demo.User{}
user2.UnmarshalJSON([]byte(user1))
fmt.Printf("%+v\n", user2) // {Id:0 Name:yan1 Age:12}
//执行 go run main.go
```
';