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

    ~~~

  • 相关阅读:
    中国的南方人和北方人有什么区别?总算说透了!
    怎样通过穴位按摩来减轻脚踝扭伤的疼痛
    关于脚踝不得不说的各种事
    电影发烧友必备知识-720P、1080P、4K的区别
    有什么相见恨晚的小知识?
    男生有钱到底有多重要?
    es6学习笔记5--promise
    es6学习笔记4--数组
    js设计模式总结1
    es6学习笔记3--解构和对象
  • 原文地址:https://www.cnblogs.com/paulwhw/p/15233934.html
Copyright © 2011-2022 走看看