zoukankan      html  css  js  c++  java
  • Golang中map转结构体的不同方法

    使用第三方模块mapstructure

    package scripts_stroage
    
    import (
        "encoding/json"
        "fmt"
        "github.com/mitchellh/mapstructure"
        "testing"
    )
    
    type User struct {
        Name        string   `json:"name"`
        PhoneNumber string   `json:"phone_number"`
        Hobbies     []string `json:"hobbies"`
    }
    
    // 对于带 下划线命名 的变量,不能直接解析到
    func TestRangeMap1(t *testing.T) {
    
        m1 := map[string]interface{}{
            "name":         "whw",
            "phone_number": "13333333333", // TODO 将字段设置为 phonenumber 就可以解析了!!!
            "hobbies":      []string{"football", "basketball"},
        }
        u1 := User{}
        // mapstructure.Decode方法...没有办法解析带下划线的字段~
        err := mapstructure.Decode(m1, &u1)
        if err != nil {
            panic(err)
        }
    
        fmt.Println("name>>> ", u1.Name)                // whw
        fmt.Println("phone_number>>> ", u1.PhoneNumber) // (空,没有解析到)
        fmt.Println("hobbies>>> ", u1.Hobbies)          // [football basketball]
    }
    
    // 对于带 下划线命名 的变量,需要json序列化与反序列化操作
    func TestMap2Struct2(t *testing.T) {
    
        m2 := map[string]interface{}{
            "name":         "whw2",
            "phone_number": "13333333333",
            "hobbies":      []string{"football", "basketball"},
        }
        u2 := User{}
        // 序列化
        arr, err := json.Marshal(m2)
        if err != nil {
            panic(err)
        }
        // 反序列化
        err2 := json.Unmarshal(arr, &u2)
        if err2 != nil {
            panic(err2)
        }
    
        fmt.Println("name>>> ", u2.Name)                // whw2
        fmt.Println("phone_number>>> ", u2.PhoneNumber) // 13333333333
        fmt.Println("hobbies>>> ", u2.Hobbies)          // [football basketball]
    
    }

    ~~~

  • 相关阅读:
    Redis学习笔记——环境搭建
    SQL 记录
    路径“D:svn.....”的访问被拒绝问题处理
    去除浏览器自动给input赋值的问题
    获取用户IP
    JS对身份证号码进行验证方法
    JS 实现倒计时
    SQL 游标
    .net上传图片实例
    生成唯一码
  • 原文地址:https://www.cnblogs.com/paulwhw/p/15233934.html
Copyright © 2011-2022 走看看