Golang运行时动态生成结构体
This commit is contained in:
63
README.md
Normal file
63
README.md
Normal file
@ -0,0 +1,63 @@
|
||||
# Golang 运行时动态结构体
|
||||
|
||||
主要提供在运行时动态生成结构体的能力, 同时支持合并多个已有结构体,生成一个新的结构体
|
||||
|
||||
主要功能如下:
|
||||
* 运行时动态生成结构体, 更灵活
|
||||
* 运行时继承已有结构体的结构
|
||||
* 运行时合并多个结构体
|
||||
* 向结构体中新增字段
|
||||
* 移除结构体中指定字段
|
||||
* 修改已存在字段的类型以及Tag标签
|
||||
* 读取动态结构体字段的Helper
|
||||
* 动态结构体的值, 解析到一个已定义的结构体中
|
||||
* 懂动态结构体生成slice或者map实例
|
||||
|
||||
## 使用示例
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"git.zhangdeman.cn/zhangdeman/dynamic-struct"
|
||||
)
|
||||
|
||||
func main() {
|
||||
instance := NewStruct().
|
||||
AddField("Integer", "", 0, `json:"int"`, false).
|
||||
AddField("Text", "", "", `json:"someText"`, false).
|
||||
AddField("Float", "", 0.0, `json:"double"`, false).
|
||||
AddField("Boolean", "", false, "", false).
|
||||
AddField("Slice", "", []int{}, "", false).
|
||||
AddField("Anonymous", "", "", `json:"-"`, false).
|
||||
Build().
|
||||
New()
|
||||
data := []byte(`
|
||||
{
|
||||
"int": 123,
|
||||
"someText": "example",
|
||||
"double": 123.45,
|
||||
"Boolean": true,
|
||||
"Slice": [1, 2, 3],
|
||||
"Anonymous": "avoid to read"
|
||||
}
|
||||
`)
|
||||
|
||||
err := json.Unmarshal(data, &instance)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
data, err = json.Marshal(instance)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
fmt.Println(string(data))
|
||||
// Out:
|
||||
// {"int":123,"someText":"example","double":123.45,"Boolean":true,"Slice":[1,2,3]}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user