package main
import (
"encoding/json"
"errors"
"fmt"
"reflect"
"strconv"
"time"
)
type User struct {
a string
b string
}
type S struct {
User
Name string
Age int
Address string
}
//结构体转map方法1
func Struct2Map(obj interface{}) map[string]interface{} {
t := reflect.TypeOf(obj)
v := reflect.ValueOf(obj)
var data = make(map[string]interface{})
//func (v Value) NumField() int, 返回v持有的结构体类型值的字段数,如果v的Kind不是Struct会panic
for i := 0; i < t.NumField(); i++ {
data[t.Field(i).Name] = v.Field(i).Interface()
}
return data
}
//结构体转map方法2
func StructToMapViaJson(data S) map[string]interface{} {
m := make(map[string]interface{})
//struct 转json
j, _ := json.Marshal(data)
//json 转map
json.Unmarshal(j, &m)
return m
}
func FillStruct(data map[string]interface{}, obj interface{}) error {
for k, v := range data {
//fmt.Println("k: ", k, " v: ", v)
err := SetField(obj, k, v)
if err != nil {
return err
}
}
return nil
}
func SetField(obj interface{}, k string, v interface{}) error {
//结构体属性值
structValue := reflect.ValueOf(obj).Elem()
//
golang struct 转map 及 map[string]*Struct 初始化和遍历
最新推荐文章于 2023-01-16 17:28:37 发布