package main import ( "fmt" "reflect" "github.com/mitchellh/mapstructure" ) type User struct { Name string `json:"name"` IsAdmin bool `json:"is_admin"` } func MapToStruct() { mapInstance := make(map[string]interface{}) mapInstance["Name"] = "Nick" mapInstance["IsAdmin"] = true var user User if err := mapstructure.Decode(mapInstance, &user); err != nil { fmt.Println(err) } fmt.Println("struct:", user) } func StructToMap(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() { MapToStruct() user := User{"Nick", true} userMap := StructToMap(user) fmt.Println("userMap:", userMap) }