创建 struct
在工作中需要动态生成一些struct并赋值
package main
import (
"encoding/json"
"fmt"
"github.com/mitchellh/mapstructure"
"reflect"
)
// 打印结构方便查看
func xprint(input interface{}) {
b, err := json.MarshalIndent(input, "", "\t")
if err != nil {
fmt.Println("json.Marshal failed:", err)
return
}
fmt.Println(string(b))
}
func main() {
// 从数据库查询规则
rule := []map[string]any{
{
"defaultValue": "哈哈",
"name": "Name",
"json": `json:"name" label:"名称"`,
},
{
"defaultValue": 1,
"name": "Age",
"json": `json:"age" label:"年龄"`,
},
}
var tmpStruct = make([]reflect.StructField, 0, len(rule))
for _, row := range rule {
tmpStruct = append(tmpStruct, reflect.StructField{
Name: row["name"].(string),
Type: reflect.TypeOf(row["defaultValue"]),
Tag: reflect.StructTag(row["json"].(string)),
})
}
typ := reflect.StructOf(tmpStruct)
fmt.Printf("%v\n", typ)
defaultValue := map[string]interface{}{
"name": "我是测试",
"age": 100,
}
typStruct := reflect.New(typ).Elem().Interface()
err := mapstructure.Decode(defaultValue, &typStruct)
if err != nil {
fmt.Println(err)
}
xprint(typStruct)
}