美文网首页
【每天一个Go知识点】(7) go:map转结构体

【每天一个Go知识点】(7) go:map转结构体

作者: HAO延WEI | 来源:发表于2021-09-30 16:18 被阅读0次

    方式一、通过mapstructure.Decode()方法

    可以通过github.com/mitchellh/mapstructure包的mapstructure.Decode(map[string]interface,*struct)方法将map转换成结构体,该方法的参数有两个,
    第一个参数是要转换的map变量,
    第二个参数是struct结构体变量指针,
    下面通过一个例子说明mapstructure.Decode()函数的使用方法,如:

    """
    注意的点:
    1、map[string]interface的键值将对应字段赋值到结构体时忽略大小写;
    2、结构体中所有字段名必须以大写字母开头,否则将无法赋值
    3、使用mapstructure.Decode()方法不能转化携带_特殊符号的变量
    """
    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)
    }
    
    

    运行结果

    val:
    map[adress:[beijing nanjing] id:1 name:xiaoming]
    struct:
    {1 xiaoming [beijing nanjing]}
    

    方式二、通过json序列化和反序列化实现map到struct的转换

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    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{}
        arr,err := json.Marshal(val)
        if err != nil {
            fmt.Println(err)
            return
        }
        err = json.Unmarshal(arr,&stu)
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Println("val:")
        fmt.Println(val)
        fmt.Println("struct:")
        fmt.Println(stu)
    }
    

    运行结果:

    val:
    map[adress:[beijing nanjing] id:1 name:xiaoming phone_number:12345678]
    struct:
    {0 xiaoming [beijing nanjing] 12345678}
    

    相关文章

      网友评论

          本文标题:【每天一个Go知识点】(7) go:map转结构体

          本文链接:https://www.haomeiwen.com/subject/zlpenltx.html