Go map to struct
package main
import (
"fmt"
"github.com/goinggo/mapstructure"
)
type Person struct {
Name string
Age int
}
func MapToStruct() {
mapInstance := make(map[string]interface{})
mapInstance["Name"] = "liang637210"
mapInstance["Age"] = 28
var person Person
//Convert map to the specified structure
if err := mapstructure.Decode(mapInstance, &person); err != nil {
fmt.Println(err)
}
fmt.Printf("map2struct struct :%v", person)
}
func main(){
MapToStruct()
}
Method 1. Through the mapstructure.Decode() method
package main
import (
"fmt"
"github.com/mitchellh/mapstructure"
)
type student struct{
id int `json:"id"`
Name string `json:"name"`
Adress []string `json:"adress"`
}
func main() {
val := map[string]interface{}{
"id":1,
"name":"xiaoming",
"adress":[]string{"beijing","nanjing"},
}
stu := student{}
err := mapstructure.Decode(val,&stu)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println("val:")
fmt.Println(val)
fmt.Println("struct:")
fmt.Println(stu)
}
operation result
val:
map[adress:[beijing nanjing] id:1 name:xiaoming]
struct:
{1 xiaoming [beijing nanjing]}
Method 2: Convert map to struct through json serialization and deserialization
package main
import (
"fmt"
"github.com/mitchellh/mapstructure"
)
type student struct{
id int `json:"id"`
Name string `json:"name"`
Adress []string `json:"adress"`
PhoneNumber string `json:"phone_number"`
}
func main() {
val := map[string]interface{}{
"id":1,
"name":"xiaoming",
"adress":[]string{"beijing","nanjing"},
"phone_number":"12345678",
}
stu := student{}
//使用mapstructure.Decode()方法
err := mapstructure.Decode(val,&stu)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println("val:")
fmt.Println(val)
fmt.Println("struct:")
fmt.Println(stu)
}
val:
map[id:1 ipadress:[beijing nanjing] name:xiaoming phone_number:12345678]
struct:
{0 xiaoming [beijing nanjing] }