golang struct turn map and map [string] * Struct initialization and traverse

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())
    }
}


Guess you like

Origin www.cnblogs.com/nyist-xsk/p/11301468.html