package main
import (
"fmt"
"reflect"
)
type S struct {
Name string
Age int
Address string
}
//结构体转map
func Struct2Map(obj interface{}) map[string]interface{} {
t := reflect.TypeOf(obj)
v := reflect.ValueOf(obj)
var data = make(map[string]interface{})
for i := 0; i < t.NumField(); i++ {
data[t.Field(i).Name] = v.Field(i).Interface()
}
return data
}
func main() {
info1 := S{Name: "xsk", Age: 22, Address: "shanghai"}
data := Struct2Map(info1)
fmt.Println("data: ", data, " ", "typeof(data): ", reflect.TypeOf(data))
for k, v := range data {
fmt.Println(k, v.(interface{}))
}
fmt.Println("---------")
//map[string]*Struct下面两种初始化都行
//var info = map[string]*S{"info": &S{Name: "mtt", Age: 23, Address: "shanghai"}}
var info = map[string]*S{"info": &S{}, "other": &S{}}
info["info"].Name = "mtt"
info["info"].Age = 23
info["info"].Address = "shanghai"
fmt.Println("info: ", *info["info"])
t := reflect.TypeOf(*info["info"])
v := reflect.ValueOf(*info["info"])
for k := 0; k < t.NumField(); k++ {
fmt.Printf("%s: %v\n", t.Field(k).Name, v.Field(k).Interface())
}
}
golang struct turn map and map [string] * Struct initialization and traverse
Guess you like
Origin www.cnblogs.com/nyist-xsk/p/11301468.html
Recommended
Ranking