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] }

Leave a Reply

Your email address will not be published. Required fields are marked *

en_USEnglish