package main
import (
"fmt"
"reflect"
)
func main() {
ret := struct{
Name string `json:"name"`
Age int `json:"age"`
}{}
ret.Name = "justin"
ret.Age = 18
m := StructToMap(ret, "json")
for k,v := range m{
fmt.Printf("%s:%v \n", k,v)
}
}
/*
*@brief :struct to map[string]interface{}
*@param :obj interface{}
*@param :tagName tag Name
*@return :map[string]interface{}
*/
func StructToMap(obj interface{}, tagName string) map[string]interface{} {
out := make(map[string]interface{})
t := reflect.TypeOf(obj)
v := reflect.ValueOf(obj)
// 取出指针的值
if v.Kind() == reflect.Ptr{
v = v.Elem()
}
// 判断是否是结构体
if v.Kind() != reflect.Struct{
fmt.Println("it is not struct")
return nil
}
for i:= 0 ; i < t.NumField(); i ++ {
if tagVal := t.Field(i).Tag.Get(tagName); tagVal != ""{
out[tagVal] = v.Field(i).Interface()
}
}
return out
}
结构体转化map[string]interface{}
最新推荐文章于 2025-04-19 09:58:00 发布